【问题标题】:Tell server that user is no more on internet告诉服务器用户不在互联网上
【发布时间】:2015-08-14 11:37:33
【问题描述】:

我是 node.js 的新手,正在尝试使用 node.js 和 socket.io 开发群聊。我可以进行群聊,也可以管理系统中的数据。

现在,我的问题在于离线用户,即未连接到互联网。 我有这个用户的连接流,就好像我做 receiverUserSocket.emit("sendMsg",data) 没有办法验证这个用户是否收到消息。 是的,有一个事件 .on("disconnect") 但我得到了大约 30 - 40 秒的延迟。

有什么方法可以确定我们要向其发送消息的用户是在线还是离线。

【问题讨论】:

    标签: node.js cordova socket.io phonegap-plugins


    【解决方案1】:

    最好的方法是使用 socket.io 心跳 - 假设您使用的是 socket.io。

    心跳和检测终止连接的问题在这里得到了很好的解释:

    Advantage/disadvantage of using socketio heartbeats

    请记住,您可以控制心跳超时值(从而强制断开连接事件出现得更快),如下所述:

    Controlling the heartbeat timeout from the client in socket.io

    但这可能会给您的服务器带来更大的压力。

    【讨论】:

    • 谢谢!为您及时回复我的问题。是的,我们可以按照您建议的方式做到这一点,但同时我不想让服务器负载或从服务器连续 ping 到客户端。我正在寻找的是一些可以返回套接字.emit 有效性的方法,例如它是否确实有效并且接收器是否收到了预期的内容。
    • 事情是,正如我在第一个链接中所解释的那样,真的没有其他办法。您基本上可以选择 - 更频繁地发送心跳,或者向断开连接的客户端发送更多消息。也许在两者之间取得某种平衡。
    • 如何在客户端断开连接时保持时间戳,并在此时间范围内向服务器请求所有未决或未连接的消息。
    • 这是一个完全不同的问题。如果您想让客户收到错过的消息,那么可以,您可以这样做。但是您的服务器仍会发送没有人会收到的消息。
    • 实际上在 node.js 中我们有一个事件 .on("disconnect") 在这个事件上我可以从一群人中删除这个断开连接的用户来发送它并将它的日志保存在数据库中。现在唯一需要考虑的是处理我正在尝试处理的事件的 30 - 40 秒延迟。
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 2020-12-06
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多