为啥 MongooseIM 会在 60 秒后关闭 websocket 连接?

Posted

技术标签:

【中文标题】为啥 MongooseIM 会在 60 秒后关闭 websocket 连接?【英文标题】: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 秒后强制关闭连接。我想知道:

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

【问题讨论】:

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

以上是关于为啥 MongooseIM 会在 60 秒后关闭 websocket 连接?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 连接检测在 60 秒后不起作用

易语言怎么写倒计时关闭计算机系统? 比如,按钮1.被点击了,我要它在60秒后关闭计算机系统,该怎么

为啥我的闹钟管理器没有在指定时间关闭?

为啥我在 heroku 上的应用程序在 30 秒后崩溃?

小程序有时会自动关闭

为啥只播放 UNNotificationSound 的前 5 秒