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,并且我对正在发生的事情的理解是这样的:
我尝试重新连接之前尝试调用disconnect()
,并将重新连接设置为false,但是当没有连接套接字并且我调用disconnect()
时,它会抛出"Cannot call method 'close' of undefined"
。
什么可能是一个正确的解决方案,让重新连接为false,有点“重置”socket.io准备下次连接尝试?
答案 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等等。