我的应用程序是用PHP构建的(在nginx / php-fpm上提供),我使用带有socket.io的node / js来进行用户推送通知。这些是使用Redis pub / sub推送到PHP和node.js之间的链接
node.js应用程序维护一个在线用户ID的数组。当用户连接到socket.io时,它们会被添加,并在断开连接时从数组中删除。
MySQL用作主数据库,我有一个标准关系表,表示谁在关注谁。当用户登录并显示给用户ID时,将检索用户ID列表。
我现在希望将这两组数据相交,以与Facebook类似的方式提供这些关系的实时在线状态(在线绿灯和离线灰灯)
什么是最高性能和最可扩展的管理方式。我目前的思考过程是这样的:
在客户端,我们有一个javascript数组的关注者用户ID。设置一个计时器客户端,每隔60秒左右将此数组推送到node.js应用程序。 Node.js使用当前的在线用户数组来处理跟随者ID,并返回描述哪些用户在线的对象。
现在这可以工作,但感觉可能是node.js上的重负荷,以便始终循环遍历每个在线用户的用户关注者列表。或许我错了,考虑到主应用程序本身是由PHP服务而不是通过当前只处理通知推送的节点,这将是相对微不足道的?
无论如何,还有更好的方法吗?值得注意的是,我还使用redis来构建用户活动流(数据存储在MySQL中,redis维护活动ID的列表)
因此,我已经看到Redis服务器已经处于活动状态,是否会有更好的方法来利用Redis本身呢?
感谢您的任何建议
答案 0 :(得分:0)
如果我没记错的话,当socket.io连接到客户端时,每次检查活动连接并返回结果时都向客户端发出请求,在回调中,你可以将更新时间为活动用户的代码放入DB中。当从DB获得超过5分钟的最后笔记时。