socket.io客户端连接无法在第二次进行

时间:2013-09-21 13:23:38

标签: node.js express socket.io

目前,我正在使用nodejs express实现API,然后需要连接到socket.io并发送事件。

API位于socket.io-client(客户端),它连接到socket.io(服务器)

第一次API调用:成功

连接是为API的第一次调用,发送消息并且可以断开套接字,在客户端和服务器端都调用'disconnect'回调。

第二次API调用:失败

第二次调用API时,无法建立与服务器的连接,不调用客户端的“客户端”回调。

第三次API致电:成功

然后我尝试重新启动客户端,保持其他内容不变。再次调用API,并成功连接到socket.io,一切正常。

有谁可以解释这背后的后勤?

更新

client.js

   App.getByUserId(message.to_id, function(error, app) {
  var  socket = io.connect('http://127.0.0.1:9002');
  socket.on('connect', function(){
  console.log("client connect socket id:" + socket.id);
    console.log("appkey:" + app.private_token);
    socket.emit('appkey.check',{appkey: app.private_token, uuid: message.to_id.uuid},    function(data){
        socket.emit("forceDisconnect");
        socket = null;

    });
});

2 个答案:

答案 0 :(得分:11)

你只是点击了Socket.IO的许多“功能”或“错误”,这取决于你如何看待它。 Socket.IO试图变得聪明并重新使用连接(实际上会导致很多连接问题)解决这个问题的方法是使用force new connection中的io.connect选项:

io.connect('http://127.0.0.1:9002', { 'force new connection': true });

如果使用socket.io转换器,还可以使用包装Socket.IO的https://github.com/primus/primus。在内部,它完全删除了io.connect的使用,并使用更低级别的io.Socket构造函数来创建更稳定的连接,这将通过stock socket.io获得。

答案 1 :(得分:0)

对于套接字1.0+,必须使用它来强制建立新连接。

io.connect(SERVER_IP, { 'forceNew': true });