【问题标题】:Websocket stops receiving data after some time (20-30 minutes)Websocket 在一段时间后(20-30 分钟)停止接收数据
【发布时间】:2016-02-11 13:32:02
【问题描述】:


我在java中有websocket,它每秒向javascript websocket客户端发送几条消息(5 -10),然后使用角度ui-grid显示。

问题是 20-30 分钟后,浏览器(IE、Firefox、chrome)停止接收消息。

  • 可能是什么问题?
  • javax.websocket.Session 的默认会话超时值是多少?
  • 我应该检查哪些设置/值,例如getMaxTextMessageBufferSize()

【问题讨论】:

  • c++ 应用程序,它发送消息,运行在单独的服务器和 java 应用程序服务器,它包含 java websocket,运行在单独的服务器上。当客户端(浏览器)从同一服务器(java/tomcat)运行时没有问题。但是,如果浏览器是从不同的机器上运行的,就会出现问题,java websocket 会话将使用 NORMAL_CLOSURE 关闭。问题似乎是丢包。请编辑问题以添加此信息

标签: java websocket


【解决方案1】:

检查 getMaxIdleTimeout() / setMaxIdleTimeout() 是否是您要查找的内容。

来自 setMaxIdleTimeout() 上的 javax.websocket.Session 文档:

设置此会话之前的非零毫秒数,如果它不活动,则容器将关闭它,即没有消息发送或接收。值为 0 或负数表示会话永远不会因为不活动而超时。

【讨论】:

  • 这可能不是必需的,因为会话永远不会空闲,每秒发送的消息很少。无论如何,现在我将 setMaxIdleTimeout 设置为零。
【解决方案2】:

问题在于通信链路(有线连接)。我通过在 websocket.onclose(客户端 javascript 代码)上重新连接到 websocket 解决了这个问题。当 websocket 会话关闭时调用 onclose。我通过在 onclose 中调用 connect() 函数重新连接。

这个答案也有很大帮助。 AngularJS: Reconnect WebSocket inside a service

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    相关资源
    最近更新 更多