Socket.io在第二次连接后触发连接事件

时间:2013-10-03 23:59:23

标签: node.js socket.io

我正在使用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。现在再次加载页面,它会同时记录connectionconnect

更新: 似乎只是第一个连接有这样的问题,之后它按预期在任何地方工作。在每个节点服务器(重新)启动之后,就会出现该行为。 注意:节点本身提供了使用socket.io的页面,即使在第一个请求时也是如此,因此应排除节点问题。 浏览器也没关系,每个浏览器都是一样的。

1 个答案:

答案 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
});