【问题标题】:Which socket.io function gets triggered immediately when user goes offline?当用户离线时,哪个 socket.io 函数会立即被触发?
【发布时间】:2019-08-11 19:36:18
【问题描述】:

我在服务器端使用disconnect 事件来检测用户的互联网何时断开。但是每当从客户端的设备上关闭 WIFI 时,我注意到该功能会在大约 20 秒后触发。是否有任何其他 socket.io 事件甚至在 disconnect 事件之前被触发?

【问题讨论】:

    标签: android socket.io


    【解决方案1】:

    在服务器上,disconnecting 事件稍早于disconnect 事件,但时间上的差异可能并不重要。 disconnecting 是在套接字从它所在的任何房间移除之前触发的,而 disconnect 是紧随其后的。我怀疑disconnecting 事件是否会改善您的情况,因为两者之间的时间差异非常小。

    当连接/传输中断时,TCP 套接字不会关闭,服务器不会立即知道他们已经失去了连接。就它而言,它仍然有一个连接到客户端的开放套接字。

    socket.io 参与端到端的心跳,所以在某些时候,服务器会意识到心跳已经停止。服务器意识到心跳丢失之前需要多长时间取决于很多事情,有些是情境,有些是基于配置。

    例如,如果服务器在连接断开之前刚刚从客户端获得了成功的心跳,那么在服务器知道下一个心跳丢失之前将是一个完整的心跳周期。另一方面,如果在安排心跳之前连接中断,那么服务器会更快地注意到。

    此外,还有各种配置选项(超时)可确定服务器在放弃并确定连接断开之前等待重新建立连接的时间。

    您可以检查服务器的pingTimeoutpingInterval 配置选项,如the doc here 中所述。缩短这些将允许服务器更快地意识到客户端已断开连接,但它也会给客户端和服务器增加少量负载,使用更多带宽并可能影响远程设备使用多少电池电量 - 所以要小心设置这些值太短了。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-21
    • 2013-09-09
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2013-04-02
    • 2018-08-20
    • 2018-06-23
    相关资源
    最近更新 更多