我在我的应用程序中使用 Jetty Web 套接字,并将 Jetty 7 作为我们的服务器。
在我们的应用程序中,数据将每 1 秒通过 web Socket 持续流动,根据我们的应用程序设计,如果 Socket 空闲 4 分钟,则 Socket 将断开连接。
现在我们在我们的应用程序中遇到 Web Socket 断开连接,我无法找出 Web Socket 断开连接的原因,这是因为 Socket 空闲了 4 分钟还是网络级别发生了一些事情(我的意思是负载均衡器,防火墙 - ETC )
对于每个断开连接,在 Jetty 内部,原因代码为 1006 (chrome)
请让我知道如何找出断开连接的实际原因?
有什么方法可以监控网络套接字流量吗?
我曾尝试使用 Chrome 调试器工具 Websocket 选项卡来监控流量,但是一旦断开连接,我就不知道当时 Websocket 中存在哪些数据?
请分享您对如何处理这种情况的想法,即如何找出找出 WebSocket 的原因是什么?
最佳答案
Jetty 开发人员强烈建议在使用 WebSockets 时升级到 Jetty 9。
(披露,我是 Jetty 提交者)
Jetty 7 和 8 实现了 WebSocket Drafts 的早期版本,并且根据您的浏览器,您将获得 WebSocket 的截然不同的行为。
最终支持 websocket 的浏览器(Jetty 7 和 8 可以使用)
从 Jetty 9 开始,对 WebSocket 草案版本的所有支持都已被放弃,而只支持使用已发布的 RFC-6455 规范版本。
现在,到您的 1006 关闭代码问题。
那是一个 local side only close status code , 由 Chrome 发起并报告。
根据您的 Chrome 版本,错误 1006 的原因可能有十几个不同的原因。几乎所有这些都归结为连接或协议(protocol)问题。
使用 Jetty 7 和 8,有许多不同的超时和空闲检查(一些在连接器,一些在端点层,一些在连接层,甚至一些在 HTTP 层,还有更多在 WebSocket 层)可以得到以您的方式并严厉地终止连接,而无需发生 WebSocket 关闭握手。
这已在 Jetty 9 中解决。有 2 个超时,握手和空闲。
如果问题与协议(protocol)有关,那么您可以看到错误代码 1006 异常/非干净终止(仅限本地端)或 1002 协议(protocol)违规。
此时,您可以升级到具有更好协议(protocol)、超时、连接、关闭和错误通知的 Jetty 9。或者您可以打开服务器端 Jetty 7/8 上的所有调试,并希望您看到 StackTrace 指示服务器端问题的原因。
关于websocket - 找出发生 Web Socket 断开连接的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16732317/