首次尝试后Socket.io客户端无法连接

时间:2012-12-17 09:17:16

标签: connection client socket.io

Socket.io连接到Java Netty服务器。如果socket.io尝试在服务器关闭时连接服务器,则会发出404。所以Javascript控制台说:

http://mylocalhost.com/socket.io/1/?t=1354790544338 - Failed to load resource

此后,socket.io连接完全死亡。由于404 ...

,它不会再尝试连接

我应该如何处理?我试图设置一个间隔,它会尝试每五秒连接一次,将服务器置于联机状态,但由于该错误,它不会尝试连接。

页面重新加载后,它正常工作。在socket.io中是否有办法观察服务器何时再次联机然后连接到它?什么是适当的解决方案?

我已经确保正确加载了socket.io.js客户端javscript,并且我对正在发生的事情的理解是这样的:

  1. socket.io启动握手,socket.socket.connecting设置为true
  2. 请求http://mylocalhost.com/socket.io/1/?t=1354790544338导致404,因为服务器已关闭
  3. 这是一个错误,但socket.socket.connecting保持为true,这会导致下一次重新连接尝试失败,因为如果它认为它已经在尝试重新连接,它将不会尝试重新连接
  4. 我尝试重新连接之前尝试调用disconnect(),并将重新连接设置为false,但是当没有连接套接字并且我调用disconnect()时,它会抛出"Cannot call method 'close' of undefined"

    什么可能是一个正确的解决方案,让重新连接为false,有点“重置”socket.io准备下次连接尝试?

2 个答案:

答案 0 :(得分:1)

为所有可能的socket.io客户端错误设置处理程序似乎为我解决此问题*。这包括:

'connect_error'
'connect_timeout'
'reconnect_error'
'reconnect_failed'
'error'

经过一些实验,'错误'处理程序似乎是阻止404停止其他所有内容的重要因素。

*似乎已修复,因为我无法在本地测试设置中可靠地重现它。很高兴知道添加这些处理程序是否可以解决其他任何人的问题。

答案 1 :(得分:-1)

它尝试请求的socket.io文件包含在JS中使用的实际脚本。该文件由Java服务器提供。因此,当您请求此文件时 - 它将无法加载,这就是您看到404错误的原因。

由于未加载文件,因此与该文件的套接字相关的任何内容都不可用。 所以你想要尝试做的是捕获未加载脚本文件的场景。点击此处:load scripts asynchronously

因此,您必须尝试异步加载此脚本,并在加载后检查状态。如果失败或没有及时响应 - 刷新请求句柄,并在一段时间后再次请求。

一旦文件成功加载,您就可以开始使用JS函数来调用connect等等。