2016-04-22 164 views
1

我正在使用“socket.io”:“1.4.5”,“socket.io-redis”:“1.0.0”。使用socket-io-client的javascript客户端似乎很高兴地连接到服务器,除了服务器重新启动时。连接尝试失败,触发'{“消息”:“xhr轮询错误”,“类型”:“TransportError”,“description”:0“}'消息'connect_error'事件如果我重新启动浏览器连接工作正常。我还注意到,如果我在事件处理程序中为'connect_error'设置了一个断点并等待几秒钟,那么连接尝试最终会成功。我错过了客户端代码中的某个配置设置?这里是我的客户端代码重新启动服务器后,socket.io javascript客户端无法重新连接

var socketConnectParams = {'max reconnection attempts': 150}; 
    socketConnectParams['reconnection'] = true; 
    socketConnectParams['reconnectionDelay'] = 5000; 
    socketConnectParams['reconnectionDelayMax'] = 15000; 
    var socket = io('http://localhost:8888', socketConnectParams); 

    socket.on('connect', function() { }); 

    socket.on('connect_error', function(error) { 
     dLog("connection error event received." + JSON.stringify(error)); 
    }); 

回答

3

我听一个“disconnect”事件重新绑定一个新的'connect'事件。这样,如果服务器重新启动,本地客户端会检测到这个并创建一个新的监听器,然后服务器再次启动。也许你可以试试。

 socket.on('disconnect', function(){ 
      socketCleanup(); // this is a function to cleanup all listeners, just in case, so you can restart fresh 
      socket.on('connect', function(){ 
       socketConnect(); 
      }); 
     }); 
+1

呃,只要没有关闭选项,socket.io就会自动重新连接。我不知道为什么这将是需要的,如果客户端没有错误配置。 – jfriend00

+0

在我的情况下,套接字确实重新连接 - 但我必须重置连接上发生的所有配置,消息事件(我现在不记得为什么)。也许是因为重新连接得到一个新的套接字ID?我需要检查并回顾一下我的具体情况。 **编辑**我认为这是因为原始套接字订阅了一个房间,新的套接字将会丢失,需要重新订阅。 - 我真的需要调查,对不起。 – noderman

相关问题