6

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

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

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

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

请让我知道如何找出断开连接的实际原因?

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

我曾尝试使用 Chrome 调试器工具 Websocket 选项卡来监控流量,但是一旦断开连接,我就不知道当时 Websocket 中存在哪些数据?

请分享您对如何处理这种情况的想法,即如何找出找出 WebSocket 的原因是什么?

4

2 回答 2

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 指示服务器端问题的原因。

于 2013-07-05T21:37:57.610 回答
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

希望这可以帮助。

于 2013-07-05T21:05:59.420 回答