显示在线关注者的最佳方式是啥,node.js/socket.io 和 Redis

Posted

技术标签:

【中文标题】显示在线关注者的最佳方式是啥,node.js/socket.io 和 Redis【英文标题】:What is the best way to show online followers, node.js/socket.io and Redis显示在线关注者的最佳方式是什么,node.js/socket.io 和 Redis 【发布时间】:2013-06-10 04:17:26 【问题描述】:

我的应用程序是用 php 构建的(在 nginx/php-fpm 上提供服务),我使用 node/js 和 socket.io 来为用户推送通知。这些是使用 Redis pub/sub 推送到 PHP 和 node.js 之间的链接

node.js 应用维护了一个在线用户 ID 数组。它们在用户连接到 socket.io 时被添加,并在用户断开连接时从数组中删除。

mysql 用作主数据库,我有一个标准关系表,表示谁在关注谁。当用户登录并显示给他们时,会检索关注者用户 ID 的列表。

我现在希望将这两组数据相交,以类似于 facebook 的方式提供这些关系的实时在线状态(在线为绿灯,离线为灰色)

什么是最高效和最可扩展的管理方式。我目前的思考过程是这样的:

在客户端,我们有一个由追随者用户 ID 组成的 javascript 数组。设置一个计时器客户端,每 60 秒左右将此数组推送到 node.js 应用程序。 Node.js 处理与当前在线用户数组相交的关注者 ID,并返回一个描述哪些用户在线的对象。

现在这可以工作了,但感觉 node.js 可能会为每个在线用户持续循环遍历用户关注者列表,这可能是一个沉重的负担。或者也许我错了,考虑到主应用程序本身是由 PHP 提供的,而不是通过当前仅处理通知推送的节点,这将是相对微不足道的?

不管怎样,有没有更好的方法?值得注意的是,我还使用redis构建用户活动流(数据存储在MySQL中,redis维护活动ID列表)

既然我已经有一个 Redis 服务器处于活动状态,那么是否有更好的方法来利用 Redis 本身呢?

感谢您的建议

【问题讨论】:

会改为从节点推送到客户端吗? 【参考方案1】:

如果我没记错的话,当socket.io连接到客户端时,每次都会向客户端发出请求以检查活动连接并返回结果,在回调成功中,您可以将更新时间的代码放入数据库中的活动用户.以及何时从 DB 获取超过 5 分钟的最后笔记。

【讨论】:

以上是关于显示在线关注者的最佳方式是啥,node.js/socket.io 和 Redis的主要内容,如果未能解决你的问题,请参考以下文章

在 NSWindow 下方显示内容的最佳方式是啥?

并排显示两个外部网页的最佳方式是啥?

在网站上显示图像的最佳方式是啥? [关闭]

在 Extjs 中显示错误消息的最佳方式是啥?

在 UIScrollView 上显示大 UIView 的最佳方式是啥?

在鼠标位置(鼠标左上角)显示 WPF 窗口的最佳方式是啥?