我有2个主意。
想法1:
使用Redis将当前在线的人置于集合中。然后,来自客户端的用户将定期发送请求,以发送其所有朋友的状态。服务器将发出sql请求以获取所有朋友,并在redis集中找到他们,如果是,则他们处于联机状态。
想法2:
使用Redis PubSub,当您作为用户在线时,您可以预订所有n个朋友频道。每当用户上线时,他都会在他或她在线的频道上发布。也许正在听的人都会收到通知。
现在我无法确定哪一个更具可扩展性和效率。
答案 0 :(得分:1)
我认为想法#1 应该是解决方案。 想法2 无法正常工作。
Redis不保留已发布的消息。因此,如果客户端未连接到Redis,则该消息将丢失。当他重新连接到Redis时,他将不会收到以前发布的任何消息。
在您的想法#2 案例中,当用户登录时,他不知道他的朋友是否已经在线。因为他的在线朋友在登录之前已经发布了在线消息,所以他不会收到这些消息。