8

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

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

第一次 API 调用:成功

为 API 的第一次调用建立连接,发送消息并断开套接字,并在客户端和服务器端调用“断开”回调。

第二次 API 调用:失败

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

第三次 API 调用:成功

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

谁能解释一下这背后的物流?

更新

客户端.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;

    });
});
4

2 回答 2

11

您只是遇到了 Socket.IO 的众多“功能”或“错误”之一,具体取决于您如何看待这一点。Socket.IO 尝试变得聪明并重用连接(这实际上会导致很多连接问题)解决此问题的方法是使用force new connection您的选项io.connect

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

如果您使用 socket.io 转换器,您还可以使用https://github.com/primus/primus包装 Socket.IO。在内部,它完全取消了使用io.connect并使用更底层的io.Socket构造函数来创建更稳定的连接,这与普通的 socket.io 一样。

于 2013-09-22T12:51:56.933 回答
0

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

io.connect(SERVER_IP, { 'forceNew': true });
于 2018-08-16T09:49:24.823 回答