我正在使用socket.io和最新版本的node.js,socket.io显示了一个奇怪的行为: connect事件在客户端触发,但第一次不在服务器端触发。 重新加载或只是再次加载页面后,事件在客户端和服务器端都被正确触发。 怎么了(用我的代码?)?
// Client
var socket = io.connect(window.location.protocol + '//' + window.location.hostname, {
'sync disconnect on unload': true
});
socket.on('connect', function() {
alert("Connect");
// Do other stuff
});
-
// Server
io.sockets.on('connection', function(socket) {
console.log("connection");
io.sockets.on('connect', function(socket) {
console.log("connect");
});
});
启动服务器并加载页面:
客户端触发警报,服务器只记录connection
。现在再次加载页面,它会同时记录connection
和connect
。
更新: 似乎只是第一个连接有这样的问题,之后它按预期在任何地方工作。在每个节点服务器(重新)启动之后,就会出现该行为。 注意:节点本身提供了使用socket.io的页面,即使在第一个请求时也是如此,因此应排除节点问题。 浏览器也没关系,每个浏览器都是一样的。
答案 0 :(得分:0)
对于Socket.IO,connection
是客户端的connect
的服务器端等价物。因此,当您在connection
事件的回调内部时,套接字已经建立了连接,您不需要监听其他事件。我不确定服务器端的connect
是什么,但它没有记录,也不起作用。
// on the server
io.sockets.on('connection', function(socket) {
// this connection has already been established
// no other handler is required
});
// on the client
var socket = io.connect();
socket.on('connect', function() {
// the connection has been established
});