我花了很長時間試圖將Socket.IO-Client連接到在Sails.js框架上運行的服務器。客戶端基本上是一個簡單的JavaScript應用程序,在Raspberry Pi上與Node.js一起運行。如何將Socket.IO客戶端連接到Sails.js服務器?
想法是,一個簡單的設備連接到服務器,服務器然後註冊設備並訂閱它的消息。設備從服務器接收消息並執行一些操作。我不希望客戶端依賴於任何框架,因此我試圖避免使用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);
});
任何想法,我究竟做錯了什麼?
嘿sgress454,我掙扎着一個類似的問題,但使用Python socketio客戶端[見我的問題](http://stackoverflow.com/questions/40949932/how-to-connect-to-sails-socket- IO-服務器從-A-蟒-客戶試圖-sailssock)。你會有更多的指針嗎? – zabumba