【问题标题】:Why MongooseIM closes the websocket connection after 60 seconds?为什么 MongooseIM 会在 60 秒后关闭 websocket 连接?
【发布时间】:2018-11-13 16:35:36
【问题描述】:

我使用 MongooseIM 作为聊天服务器,并在 react-native 应用程序中使用 xmpp.js 通过 websocket 连接它。服务器在不活动 60 秒后强制关闭连接。我想知道:

  1. 如果这是默认配置?
  2. 应该/我可以更改吗?
  3. 我是否应该设置 ping 机制,以便我的客户端必须在每 60 秒后发送一些 ping 以避免断开连接

【问题讨论】:

  • 您是否在服务器上启用了 mod_ping 又名 XMPP Ping,但在客户端上没有? 60 秒是 MongooseIM 和 ejabberd 的默认 ping 间隔,因此这似乎是罪魁祸首。
  • 是的,我已经尝试过 mod_ping 模块。但是无论在 chrome 浏览器中是否使用 mod_ping,连接总是关闭,有时在 react-native 应用程序中也是如此。不知道为什么?
  • 我猜这是 web socket conn 的一些限制或安全因素。不确定
  • TCP 连接被关闭可能源于很多因素,例如你的网络环境。你在亚马逊上运行服务器吗?如果是,这可能适用于您的情况 - stackoverflow.com/a/48764819/1325207。 @michalwski 下面所说的也可能适用。

标签: react-native xmpp ejabberd mongoose-im


【解决方案1】:

WebSocket 连接将不活动的默认超时值设置为无穷大。您的配置很可能在“mod_websockets”配置中包含“{timeout, 60000}”。为了保持空闲连接连接到服务器,您可以不时发送 WebSocket ping 帧。

更多关于“mod_websockets”配置的信息在这里:: https://mongooseim.readthedocs.io/en/latest/advanced-configuration/Listener-modules/#http-based-services-bosh-websocket-rest-ejabberd_cowboy

您甚至可以通过指定选项 {ping_rate, ValueInMilliSeconds} 来配置服务器以发送 WebSocket 的 ping 帧

【讨论】:

  • 嗨 erszcz 和 michalwski,我做了一些测试,发现以下结果:
  • 1.在 mod_websockets 内部,{ping_rate, x} 属性有助于自动服务器 ping,因此它有助于防止 60 秒后在移动设备(react-native 应用程序)上自动注销,而不是在 chrome 浏览器上(使用带有 HTML 的 strophe.js) . 2. 现在我不需要使用 mod_ping 模块进行 pining,这样可以节省我的带宽。 3. {timeout, 60000} 属性必须有助于增加客户端的注销时间,但它没有这样做,我认为我的客户端应用程序负责这个 60 秒的自动注销问题而不是服务器。
  • 最终,我现在比以前处于更好的位置。谢谢米哈瓦斯基。谢谢erszcz
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 2012-02-04
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多