什么是最好的方式来显示在线追随者,node.js/socket.io和Redis



我的应用程序是内置在PHP(服务于nginx/PHP -fpm),我使用节点/js与套接字。IO用于用户推送通知。这些都是使用Redis pub/sub来推送PHP和node.js之间的互连

node.js应用维护一个在线用户id数组。它们在用户连接到socket时被添加。当它们断开连接时,从数组中移除。

MySQL被用作主数据库,我有一个标准的关系表,表示谁跟随谁。当用户记录并显示给他们时,将检索用户id的追随者列表。

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

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

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

现在这将工作,但感觉它可能是一个沉重的负载node.js通过每个在线用户的用户关注者列表始终循环。或者也许我错了,考虑到主应用程序本身是由PHP服务的,而不是通过目前只处理通知推送的节点,这将是相对微不足道的?

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

所以看到我已经有一个Redis服务器活动,有没有更好的方法利用Redis本身?

谢谢你的建议

如果我没记错的话,当socket。io连接到客户端,每次向客户端发出请求以检查活动连接并返回结果,在回调成功时,您可以将代码用于更新DB中的活动用户。

最新更新