【问题标题】:Socket.io fires connect event just after the second connectSocket.io 在第二次连接后触发连接事件
【发布时间】:2013-10-04 11:18:04
【问题描述】:

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

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    对于 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
    });
    

    【讨论】:

    • 请注意,服务器端的事件 connectconnection 现在是同义词,因此上面答案中的子句“连接是客户端连接的服务器端等效项”现在并不完全有效(至少在 v2.1 中)。但是,只有connect 事件在客户端有效。 socket.io/docs/server-api/#event-connection
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2016-03-28
    • 2018-01-28
    • 1970-01-01
    • 2017-01-18
    • 2016-09-20
    相关资源
    最近更新 更多