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

6 jetty websocket

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

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

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

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

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

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

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

请分享您对如何处理此案例的想法,即如何找出找到WebSocket的原因?

Joa*_*elt 8

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

Jetty 7和8实现了WebSocket Drafts的早期版本,并且根据您的浏览器,您将获得与WebSocket截然不同的行为.

浏览器预先支持websocket(Jetty 7和8可以使用)

  • Safari 5.x(或更早版本)
  • Opera 12.x(或更早版本)
  • Opera Mini(所有版本)
  • Chrome 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指示服务器端问题的原因.


San*_*eev 5

1006 异常终止。有时您会收到一条消息“不完整的握手响应”。您可以使用 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

希望这可以帮助。