如何实现socket.io的生存时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现socket.io的生存时间相关的知识,希望对你有一定的参考价值。

我相信我已经足够上网了,但仍然无法获得有关该主题的任何资源。如何使用Socket.io实现'生存时间'功能?

我正在使用Node.jsexpress。上面提到的time-to-live函数旨在如下所述:

如果我指定timeToLive = 10; secs,在发出消息后不到10秒内连接的客户端仍应获取消息。此功能在某些云消息传递库(如GCM)上可用。

任何在线资源将受到赞赏。

答案

socket.io中没有这样的功能。你必须自己实现它。考虑使用保存消息的对象数组和该消息的Date.now(),并在用户连接时循环它。删除所有过期的消息并发出仍然有效的消息。最小代码可能是这个,但由于大量使用拼接,它可能很慢。

var messages = [];
var TTL = 10;


io.on('connection', function (socket) {
   for(i = 0; i < messages.length; i++)
       if(messages[i].time + TTL < Date.now())
           messages.splice(i, 1);
   socket.emit('data', messages);
});

如果您需要,请考虑使用redis或任何其他高性能数据库在多个服务器之间进行同步:

以上是关于如何实现socket.io的生存时间的主要内容,如果未能解决你的问题,请参考以下文章

如何将 socket.io 部署到 Google App Engine?

如何实现 Laravel、node.js、socket.io 和 redis 以使用数据库创建实时聊天/通知

回退如何与 socket.io 一起工作?

用于 swift4 ios 的 Socket.io

socket.io 的最佳 Java 服务器实现

Java(android)中socket.io的文件描述符?