显示在线关注者的最佳方式是啥,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的主要内容,如果未能解决你的问题,请参考以下文章