每个用户的套接字io频道通知

时间:2013-12-26 06:04:48

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

我是一名经验不足的开发人员,我刚开始学习node.js socket.io。

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

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

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

根据我的理解,例如:

  1. userA向userB发布内容
  2. userB收到“用户A在墙上发布内容”的通知
  3. 实现这一目标:

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

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

    1. 会成为问题吗?

    2. 最佳做法是什么?

    3. 流量是否正确?

    4. 三江源

      注意:抱歉英文不好。

      更新

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

      1. UserA在UserB的墙上发布了一些东西
      2. 然后将ajax发送到laravel,以便我可以将消息/帖子放入db
      3. 在发出/推送事件之后,在nodejs服务器上处理该事件并将其推送到userB的频道的socketio,告诉userB userA已发布了什么
      4. 如果成功,则通知UserA他的帖子是成功的
      5. 注意我在上述流程中没有涉及redis,反馈是什么?

1 个答案:

答案 0 :(得分:3)

使用套接字执行此操作是一种非常复杂的处理方式。这是可能的,但您真正需要做的是从该页面(客户端)添加定时发布请求以检查新评论。

那时你真正需要的就是数据库。 From,To,Date,Message。

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

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