我在服务器端使用java实现了websocket。在客户端,我创建了websocket对象,我有我自己的所有事件,包括onClose函数。我测试了重新连接…websocket在chrome 26, Mozilla的windows和chrome。
Chrome在windows触发onclose事件,当我拔出网线(即onclose
触发器与关闭代码1006 [abnormaly closed]
如https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent所述),但Chrome在linux不触发任何事件。
请指出我做错了什么。
我的确切问题是为什么chrome在windows触发onclose
时,网络断开,但在linux的情况下,它不被触发。
这些应用程序可能没有注意到TCP连接断开。超时是用来检测一个失败的TCP连接,我相信默认的超时是相当长的。
浏览器/操作系统应该注意到连接在您尝试发送数据时立即消失。拔下网线后尝试发送一些数据,看看是否会触发该事件。
还有,你等信号多久了?可能是TCP超时时间过长。
如果你仍然没有得到一个关闭的事件,这很可能是由于在实现中的错误。如果您绝对需要知道连接何时断开,可以使用自己的超时实现ping机制。我相信websocket协议定义了自己的ping协议,也许可以看看。
此外,对于chrome,似乎有一个问题提出了这一点。也许它会对你有帮助。