问题 socket.io无法正常工作
详情
express [folder]; cd [folder]; npm install;
npm install socket.io
设置
客户端
var socket = io.connect('http://example.com:3000');
socket.on('connect', function() {
console.log('connected');
});
socket.on('message', function(msg){
console.log(msg);
});
socket.on('disconnect', function() {
console.log('disconnected');
});
socket.on('error', function (e) {
console.log('System', e ? e : 'A unknown error occurred');
});
服务器
[...]
app.listen(3000);
// socket.io setup
var socket = require('socket.io').listen(app);
// socket.io connection establishment
socket.on('connection', function (client) {
client.send("hello");
console.log("hello", client);
});
为什么连接事件永远不会被触发?
答案 0 :(得分:12)
需要一段时间才能注意到...... connection
上发出io.sockets
事件。在你的代码中,这将是
socket.sockets.on('connection', function (client) {
client.send("hello")
console.log("hello", client)
})
您应该使用io
代替socket
作为var名称,以避免这种混淆。
答案 1 :(得分:1)
Ricardo Tomasi是正确的,救了我的命,我疯了。
我们在2013年,there's still an issue opened (since 2 years) on this
改变了可能会有所改变,无论如何要注册“连接”。事件我不得不这样做:
var openSocket = function (uniqueID) {
var appSocket = io.connect('/'+uniqueID, { transports: ['websocket', 'xhr-polling']});
appSocket.socket.on('connect', function () {
console.log('i did connect.');
});
return appSocket;
};
答案 2 :(得分:1)
以下为我做了一个技巧:socket.io-client:" ^ 0.9.16"
io.connect("http://localhost:4000", {'force new connection': true});
现在'连接'事件一直发生,没有重复使用。
我通过检查socket.io-client / lib / io.js行来找出这个选项:192 由于我甚至无法在github中找到这个io.js文件,我认为在将来的版本中会有重构,而且这个选项可能不起作用。
至少这可能对那些将暂时解决这个问题的人有所帮助。