找出Web Socket断开的原因发生了

时间:2013-05-24 09:58:13

标签: websocket jetty

我在我的应用程序中使用Jetty Web套接字,将Jetty 7作为我们的服务器。

在我们的应用程序中,数据将通过Web Socket每1秒连续流动一次,根据我们的应用程序设计,如果Socket空闲4分钟,则Socket将断开连接。

现在我们在应用程序中遇到Web Socket断开连接,我无法找到Web Socket断开原因的原因,这是因为Socket空闲了4分钟或网络级别发生了什么事(我的意思是加载平衡器,防火墙--etc)

对于每次断开连接,Jetty内部的原因代码为1006(chrome)

请让我知道如何找出发生断线的实际原因?

我有什么方法可以监控网络套接字流量吗?

我已尝试使用Chrome调试工具Websocket选项卡来监控流量,但一旦断开连接,我当时没有关于Websocket中存在哪些数据的线索?

请分享您对如何处理此案例的想法,以了解如何查找WebSocket的原因?

2 个答案:

答案 0 :(得分:8)

Jetty开发人员强烈建议在使用WebSockets时升级到Jetty 9。 (披露,我是Jetty提交者)

Jetty 7和8实现了WebSocket草图的早期版本,并且根据您的浏览器,您将获得与WebSocket完全不同的行为。

支持websocket的最终支持的浏览器(Jetty 7和8可以使用)

  • Safari 5.x(或更早版本)
  • Opera 12.x(或更早版本)
  • Opera Mini(所有版本)
  • Chrome 13.x(或更早版本)
  • Firefox 10.x(或更早版本)
  • IE 9.x(或更早)
  • Android浏览器(任何版本)
  • Blackberry浏览器(10.x之前的版本)
  • 任何现有的Shockwave / Flash WebSocket网桥。

从Jetty 9开始,所有对WebSocket草案版本的支持都已被删除,只支持使用已发布的RFC-6455规范版本。

现在,到您的1006关闭代码问题。

这是local side only close status code,由Chrome发起并报告。 根据您的Chrome版本,您的错误原因1006可能有十几种不同的原因。几乎所有这些都归结为连接或协议问题。

对于Jetty 7和8,有许多不同的超时和空闲检查(一些在连接器,一些在端点层,一些在连接层,甚至一些在HTTP层,还有更多在WebSocket层)这可能会阻碍你的方式并严格终止连接,而不会发生WebSocket关闭握手。

这已在Jetty 9中得到解决。有2次超时,握手和空闲。

如果问题与协议有关,那么您可以看到错误代码1006异常/非清除终止(仅限本地端)或1002协议违规。

此时,您可以升级到Jetty 9,具有更好的协议,超时,连接,关闭和错误通知。或者您可以打开服务器端Jetty 7/8上的所有调试,并希望您看到StackTrace指示服务器端问题的原因。

答案 1 :(得分:4)

1006是异常终止。有时你会收到一条消息“Incomplete Handshake Response”。您可以使用TCP Mon或Wireshark来监视套接字流量并查看正在传输的标头。

如果服务器未设置为在连接上接收大数据,我也看到了这一点。你会看到类似“连接关闭,状态= 1006,原因= EOF”的内容。 Jetty限制服务器可以接收的消息大小。如果您尝试发送大于此大小的邮件,Jetty将关闭连接。您可以使用Connection对象的setMaxBinaryMessageSize和setMaxTextMessageSize来增加连接的消息大小限制。 http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/websocket/WebSocket.Connection.html

希望这有帮助。