【问题标题】:Socket io channel notification for each user每个用户的 Socket io 通道通知
【发布时间】:2014-01-13 19:40:30
【问题描述】:

我是一个没有经验的开发者,我刚开始学习node.js socket.io。

如果他们的墙上有帖子或有人回复(评论)了用户的帖子,我想为每个用户发出通知,就像在 fac*book/go*gle+ 通知中一样。

我按照这里的教程http://www.codesizzle.com/node-js-and-socket-io/

我将它与 laravel4 和 redis 结合作为将消息/通知发布到 redis 的处理程序,然后 nodejs 将侦听 redis,如果有 post/event 然后使用套接字 io 将其发送到用户的浏览器

根据我的理解,例子:

  1. userA 向 userB 发布内容
  2. userB 收到“用户 A 在您的墙上发布了一些东西”的通知

实现这一目标:

  • 我需要让 userB 订阅自己的频道,可能使用他的 id
  • 那么当 userA 发布内容时,laravel4 将收到 ajax 发布数据
  • laravel 将帖子插入 MySQL 并将用户的 id + 他的帖子发布到 redis
  • 之后,nodejs 将接收到事件并将其发布到用户 B 的浏览器。

我的问题在我的声明中 “userB 订阅了自己的频道,可能使用他的 id。” 这意味着 userB 可能会订阅频道 notif-channel-{userId} -> notif-channel-967 ,如果我有成千上万的用户,那么我将拥有数千个不同的频道,可能从 notif-channel-1notif-channel-50000

  1. 会成为问题吗?

  2. 最佳做法是什么?

  3. 流程是否已经正确?

谢谢

注意:抱歉英语不好。

更新

阅读更多文章后,我想我将流程更改为:

  1. UserA 在 UserB 的墙上发帖
  2. 然后将 ajax 帖子发送到 laravel,以便我可以将消息/帖子放入数据库
  3. 在向在 nodejs 服务器上工作的 socketio 发送/推送事件以处理该事件并将其推送到用户 B 的频道之后,告诉用户 B 用户 A 发布了一些内容
  4. 如果成功则通知 UserA 他的帖子已成功

注意我上面的流程没有涉及redis,有什么反馈吗?

【问题讨论】:

    标签: node.js laravel notifications redis socket.io


    【解决方案1】:

    使用套接字来做这件事是一种相当复杂的做事方式。这是可能的,但您真正需要做的就是从该页面(客户端)添加一个定时发布请求以检查新的 cmets。

    此时您真正需要的只是在数据库中。从、到、日期、消息。

    使用套接字,您必须为每个拥有“墙”的用户设置一个频道,并且任何正在查看“墙”的人都必须订阅它,如果有很多人,您当你需要扩展时会有问题。这意味着将 redis 与 sockets.io 一起使用。

    虽然这样做很“酷”,但在我看来这太过分了。

    【讨论】:

    • 我对stackoverflow还太陌生,无法编辑我的答案,所以提醒一下......保持简单。
    • 另外,如果您希望用户在没有查看自己的墙时知道他们的墙上是否有新评论,只需检查他们上次查看自己的墙的时间,如果不是最新的时间到了,然后他们的墙上就有了新的评论。
    • “但您真正需要做的就是从该页面(客户端)添加一个定时发布请求以检查新的 cmets。”您的意思是使用 ajax 请求,例如:每 10 秒请求服务器检查新评论/通知/等?是的,在我找到socket之前我也是这么想的,不过我仍然在想优点和缺点
    • 没错。您以后仍然可以随时使用套接字进行实时聊天或其他事情,了解如何使用系统并不是一件坏事。
    • 实际上,如果我很清楚,对于通知/简单消息系统,最好使用定时 ajax 请求对吗?在流量相对中等的网站会不会成为问题?我的意思是,基于这个事实,我将至少有 5000 个用户在线,这意味着如果我将定时 ajax 设置为 5 秒,我将(假设定时请求在同一时间开始)每 5 秒有 5000 个请求,并且有以后会有更多的用户。如果我与频道进行比较,那么它将是 5000 个频道,但我不知道(因为我从不玩套接字)哪个更好,每 5 秒有 5000 个频道或 5000 个请求
    【解决方案2】:
    1. 使用缓存系统甚至数据仓库技术构建具有套接字连接的微服务,并在数据库级别使用触发器,当数据是杂乱无章的时候

    2. 使用解析数据库服务器,它具有订阅实时查询的酷炫功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2014-05-24
      • 2014-08-16
      相关资源
      最近更新 更多