0

我正在将 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 的页面,并且即使在第一次请求时也能正常工作,因此应该排除节点问题。浏览器也无所谓,每个浏览器都一样。

4

1 回答 1

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
});
于 2013-10-04T00:04:17.037 回答