我使用Jetty Web sockets在我的应用程序与Jetty 7作为我们的服务器。
在我们的应用程序中,数据将每1秒通过web Socket连续流动,并且根据我们的应用程序设计,如果Socket空闲4分钟,则Socket将被断开。
现在我们在应用程序中遇到web套接字断开连接,我无法找出web套接字断开连接的原因,这是因为套接字空闲了4分钟还是网络级别发生了什么(我的意思是负载均衡器,防火墙等)
对于每次断开连接,Jetty内部的原因代码为1006 (chrome)
请让我知道我怎样才能找到断开连接的实际原因?
是否有任何方法可以监控web套接字流量?
我已经尝试使用Chrome调试器工具Websocket选项卡来监控流量,但一旦它断开连接,我没有什么数据存在于Websocket在那个时候的线索?
请分享你对如何处理这种情况的想法,即如何找出找出WebSocket的原因?
当使用WebSockets时,Jetty开发者强烈建议升级到Jetty 9。(披露,我是一个Jetty提交者)
Jetty 7和8实现了WebSocket草案的早期版本,并且根据您的浏览器,您将获得截然不同的WebSocket行为。
支持websocket的浏览器(Jetty 7和8可以使用)
- Safari 5。x(或更早) 歌剧
- 12。x(或更早)
- Opera Mini(所有版本)
- 铬13。x(或更早)
- Firefox 10。x(或更早)
- IE 9。x(或更早)
- Android浏览器(任何版本)
- 黑莓浏览器(10.x之前版本)
- 任何现有的Shockwave/Flash WebSocket桥。
从Jetty 9开始,所有对WebSocket草案版本的支持都被取消了,只支持已发布的RFC-6455规范版本。
现在,到您的1006关闭代码问题。
这是一个本地端仅关闭状态代码,它起源于并由Chrome报告。根据您的Chrome版本,错误1006的原因可能有十几个不同的原因。几乎所有这些问题都可以归结为连接或协议问题。
在Jetty 7和8中,有许多不同的超时和空闲检查(一些在连接器,一些在端点层,一些在连接层,甚至一些在HTTP层,更多的在WebSocket层),它们会阻碍你的方式,并在没有WebSocket关闭握手发生的情况下终止连接。
在Jetty 9中已经解决了这个问题。有2种超时,握手和空闲。
如果问题与协议相关,则可以看到错误码1006异常/非干净终止(仅限本地端),或1002协议违反。
此时,您可以升级到Jetty 9,使用更好的协议、超时、连接、关闭和错误通知。或者您可以打开服务器端Jetty 7/8上的所有调试,并希望在服务器端看到指示问题原因的StackTrace。
1006是异常终止。有时你会收到这样的消息:"未完成的握手响应"。您可以使用TCP Mon或Wireshark来监视套接字流量并查看正在传输的报头。
如果服务器没有设置为在连接上接收大数据,我也会看到这种情况。您将看到类似"连接已关闭,status=1006, Reason=EOF"的内容。Jetty限制了服务器可以接收的消息的大小。如果您尝试发送大于此大小的消息,Jetty将关闭连接。您可以使用connection对象的setMaxBinaryMessageSize和setMaxTextMessageSize来增加连接上的消息大小限制。http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/websocket/WebSocket.Connection.html