4

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 保持为真,这会导致下一次重新连接尝试失败,因为如果它认为它已经在尝试重新连接,它将不会尝试重新连接

我在disconnect()尝试重新连接之前尝试过调用,它将重新连接设置为 false,但是当没有连接的套接字并且我调用disconnect()时,它会抛出"Cannot call method 'close' of undefined".

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

4

2 回答 2

1

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

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

经过一番试验,“错误”处理程序似乎是防止 404 停止其他一切的重要处理程序。

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

于 2013-04-25T20:55:48.223 回答
-1

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

由于未加载文件,因此来自该文件的与套接字相关的任何内容都将不可用。因此,您想要尝试做的是在未加载脚本文件时捕捉场景。在这里检查:异步加载脚本

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

文件加载成功后,就可以开始使用 JS 函数调用 connect 等了。

于 2012-12-20T14:37:22.650 回答