|
本帖最后由 puti 于 2020-1-8 14:14 编辑
先感谢"怪兽乐园"群里面的大神, 受到很多启发,整理思路, 分享出来
本文主要分享的是消息如何在多个服务器间转发的问题,但这并不代表一个完整的即时通信服务器系统,诸如注册,登录,离线消息,文件, P2P打洞等功能这些都未在本文的讨论范围之内
1. 对于即时通讯来说,在用户量少的时候,一台服务器就足以提供所有的服务.可是当用户数量越来越多时,一台服务器无法满足所有用户的需求,这 时就要进行服务扩容,进行分布式部署
2. 如图片所示,不同的用户登录到不同的消息服务器上,那么客户1给客户2发消息时,消息服务器-1 先收到消息,消息服务器-1首先判断客户2是否 也登录在本 服务器上,如果是,那么直接转发消息即可。如果客户2不在本服务器上,那就到路由服务器查询客户2的位置信息,比如是登录的哪台消 息服务器,然后把这个位置信息和消息内容发送到转发服务器, 转发服务器在发送的指定的消息服务器,最后,指定的消息服务器在把消息发送到客户2,这 样就可以达到消息的转发
简单总结消息的路径,如下
客户1——>消息服务器1——>路由服务器——>转发服务器——>消息服务器2——>客户2
客户1——>消息服务器1——>客户2 3. 每台消息服务器在收到客户的进入和退出状态后, 都需要把客户id,客户状态,消息服务器id等发送给路由服务器进行统一的管理,以供在转发消息时可 以 查询某个客户所在消息服务器位置,路由服务器保存的大体数据格式可看图片
4. 转发服务器特点就仅是转发消息,不保存任何的信息,所以对于网速没有要求.转发慢了,就增加消息服务器.不需要改动其他的服务器
5. 路由服务器使用HASH保存位置数据,也可以用单独的数据库来保存,这样可以保证路由服务器异常后可以实时的恢复.
百万,千万用户的通讯框架不在本文考虑范围内, 这个框架适合10万以内用户请大神不要抬杠 此框架也可以用于手机群控和电脑群控和各种的软件实时监控, 有想法的朋友可以互相交流
|
|