我花了很长时间尝试将 Socket.IO-Client 连接到在 Sails.js 框架上运行的服务器。客户端基本上是一个在 Raspberry Pi 上使用 Node.js 运行的简单 JavaScript 应用程序。
这个想法是一个简单的设备连接到一个服务器,然后服务器注册该设备并订阅它的消息。设备从服务器接收消息并执行一些操作。我不希望客户端依赖于任何框架,因此,我试图避免使用 Sailsjs-socket.io-client。目前服务器和客户端都在我的本地机器上运行。这是代码:
// Server side. Sails.js. DevicesController.js
module.exports = {
handshake: function (req, res) {
if (!req.isSocket) return res.badRequest();
Devices.create({}).exec(function (error, data) {
Devices.subscribe(req.socket, data);
});
return res.ok();
}
};
// Client side
var socket = require('socket.io-client')('http://localhost:1337/devices/handshake');
socket.on('error', function(e) {
console.log(e);
// Here I get 'Invalid namespace'
});
所以,我在客户端收到错误“无效的命名空间”,如果我是对的,这意味着服务器没有打开“/devices/handshake”。但是,在服务器端,如果我列出现有房间 ID (sails.sockets.rooms()),我可以看到当客户端尝试连接到服务器时,总是会创建一个新房间。
我尝试使用下面的 javascript 从浏览器连接到“/devices/handshake”,显然它有效。它显然与 Sailsjs-socket.io-client 一起运行。
io.socket.get('/devices/handshake', function (data, jwres) {
console.log(jwres);
});
io.socket.on('devices', function (data, jwres) {
console.log(data);
});
任何想法我做错了什么?