读书人

好奇QQ是如何实现好友下线上线都能即

发布时间: 2012-12-31 11:57:51 作者: rapoo

好奇,QQ是怎么实现好友上线下线都能即时通知给用户的
1 到底是我自己去刷新,每秒钟都不断请求我的100多个好友的分别的状态?
2 还是一旦某个用户的状态改变,就通知给他100多个好友呢?

假如好友数量没有上限,比如一个人有1万个好友,刷新的时候会崩溃吗
[解决办法]
所以腾讯养了很多专门搞这方面的博士生

我猜大概是上线下线都发送一个消息给服务器,服务器在数据库查找好友,然后从中找出在线的好友,然后一人发送一个消息
[解决办法]
很简单的,楼主想复杂了。应该是你上线登陆服务器完成后,服务器就把你的上线信息发给你的好友。你下线也一样。而且应该一定的时间你的QQ应该都会和服务器通讯一下。告诉服务器你还在。如是服务器发现有一段时间你没有发应就通知别人你下线了。
反正你在线和离线是服务器说了算,你自己说了是不算。
[解决办法]
客户端登录->发送消息到服务器->服务器获取用户好友列表->遍历好友列表,如果发现其是属于自己管理的用户,则到在线队列中查找该用户,如果找到则发送好友在线给客户端,结束。如果发现是属于其它服务器管理的用户,则算出是哪个服务器处理的,发送消息通知该服务器处理(qq有多台服务器)
[解决办法]
以下是我个人的思路,抛砖引玉。呵呵。

-----------------------
客户端登录->路由分派(由负载均衡服务器转到账号的管理服务器)->验证账号信息(验证账号的合法性,不成功则返回到重新登录框,将不会走下面的步骤)->更新好友的状态信息(更新好的状态,这个分两部分:一是从服务器端获取登录账号的好友队列的登录状态信息映射到自己客户端显示状态信息。二是,获取登录账号的好友的状态列表,服务器端发送消息到账号的上线好友列表通知有好友上线,更新他们的显示上线好友的列表
。特殊情况,退出客户端前向服务器发送退出请求,服务器修改它的状态并通知退出账号其好友列表中的显示状态。异常情况:没有正常退出,客户端会每隔一段时间向服务器发送心跳来维持他的登录状态,一旦服务器接收不到心跳,服务器将更新其为下线状态并通知异常退出账号的好友列表并关闭其连接不再对其进行维护).

读书人网 >C++

热点推荐