【发布时间】:2020-11-20 18:27:11
【问题描述】:
我有一个创建帖子功能,帖子创建者可以在其中添加要提及的用户,我想使用 websockets(我认为最好的解决方案)来通知该帖子中提到的每个用户。
将其发送给客户的最佳解决方案是什么? 我认为这种方法:
-
每一个连接的socket都会把它添加到一个数组中,然后识别它
socket.to(socketid).emit('嘿', '我刚认识你');
-
将创建的每个帖子发送给客户端,然后使用会话ID(昵称)过滤该帖子具有[a,b,c]中提到的属性
-
任何最佳解决方案?
我使用的是 mongodb,post 集合的结构是这样的
title,body,提到['nickname1','nickname2']
注意:我可以在发出事件时接收帖子内容,但如何通知该帖子中提到的特定用户?
【问题讨论】:
-
你的方法很好。我还会考虑离线用户的情况,以及存储用于缩放的套接字信息。
-
我也在使用 pwa。但是从服务器我如何制定一个逻辑来知道哪个用户被提及并在客户端通知它?
-
你可以有一个地方存储 {userId:{socketId:'asdfasdf','created':datetime}, {socket:{id:user created: datetime}}。 Redis应该没问题。以上数据可用于检查socketId是否重复。
-
是的,这就是问题中的方法 1,但你可以想象一个有 100 万个 id 的数组会有多糟糕?我认为这种方法不是最好的解决方案。 Twitter 或 stackoverflow.com 如何向特定用户发送警报?
-
存储在redis中。如果您有 100 万并发用户,那么您将有 1m 打开文件。从 redis 获取数据非常快。
标签: node.js mongodb sockets websocket socket.io