为啥 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 连接?的主要内容,如果未能解决你的问题,请参考以下文章