【问题标题】:How to notify a user who has been mentioned in a post? (theory)如何通知帖子中提到的用户? (理论)
【发布时间】:2020-11-20 18:27:11
【问题描述】:

我有一个创建帖子功能,帖子创建者可以在其中添加要提及的用户,我想使用 websockets(我认为最好的解决方案)来通知该帖子中提到的每个用户。

将其发送给客户的最佳解决方案是什么? 我认为这种方法:

  1. 每一个连接的socket都会把它添加到一个数组中,然后识别它

    socket.to(socketid).emit('嘿', '我刚认识你');

  2. 将创建的每个帖子发送给客户端,然后使用会话ID(昵称)过滤该帖子具有[a,b,c]中提到的属性

  3. 任何最佳解决方案?

我使用的是 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


【解决方案1】:

这取决于你想给什么体验。

如果您希望它是即时的,并且用户在他的屏幕上立即收到反馈,您可以使用 websockets,或者使用 firebase,这是一个实时数据库。两者都会立即在用户的屏幕上通知用户。

【讨论】:

  • 我现在正在使用 websockets,当用户创建一个帖子时,会发出一个事件来检查数据库是否有新的提及,但是我如何通知那个帖子中提到的用户?,从服务器我们如何知道提到了哪个客户端?
  • 您可以为通知读取创建一个标志。或者您可以向服务器发出信号/发送请求,说明您已阅读或打开该通知,这样服务器就会知道他收到了通知
  • 我的意思是,如果我在帖子中提到你,我如何在客户端中准确地联系你?
  • 您需要识别您的用户,如果您有与用户 ID 相关的提及/通知,您可以在用户访问页面时检查用户 ID 是否有提及未读
猜你喜欢
  • 1970-01-01
  • 2016-04-14
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多