CN108282396A - 一种im集群中的多级消息广播方法及*** - Google Patents
一种im集群中的多级消息广播方法及*** Download PDFInfo
- Publication number
- CN108282396A CN108282396A CN201810147967.0A CN201810147967A CN108282396A CN 108282396 A CN108282396 A CN 108282396A CN 201810147967 A CN201810147967 A CN 201810147967A CN 108282396 A CN108282396 A CN 108282396A
- Authority
- CN
- China
- Prior art keywords
- user
- nodes
- message
- room number
- roomid1
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 19
- 238000009826 distribution Methods 0.000 abstract description 18
- 239000012634 fragment Substances 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 3
- 101100533725 Mus musculus Smr3a gene Proteins 0.000 description 2
- 230000003362 replicative effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/04—Real-time or near real-time messaging, e.g. instant messaging [IM]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/02—Details
- H04L12/16—Arrangements for providing special services to substations
- H04L12/18—Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
- H04L12/185—Arrangements for providing special services to substations for broadcast or conference, e.g. multicast with management of multicast group membership
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/52—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail for supporting social networking services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/562—Brokering proxy services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种IM集群中的多级消息广播方法及***,用户连接IM节点并上报房间号;消息中间件MQ给IM节点发送房间号为上述房间号的消息;IM节点收到消息后,查找该房间号下面的所有用户列表,再依次通过socket套接字把消息发送给所述用户。本发明无需查找全局用户表,只需要查找单个IM节点上面的用户列表,因此彻底解决了分发延迟的问题;节点间无任何关联,所以集群扩容非常简单;本发明采用二级分发方式,轻易即可达到千万级集群规模。
Description
技术领域
本发明涉及IM 消息分发领域,特别是一种IM集群中的多级消息广播方法及***。
背景技术
Emqttd 是国内用Erlang/OTP 实现 mqtt 协议进行消息分发的分布式框架。该框架在用户规模达到千万并且集群机器多的时候,会带来集群之间用户表数据同步的问题。在进行大批量的消息转发的时候,分发的节点需要对该房间所有的用户进行遍历、再进行转发、延迟高、效率比较低。
云巴是基于MQTT协议实现的实时通信***,采用Erlang/OTP的架构设计。在云巴,消息的发布过程为,首先在接收到任务请求后,会发布任务计算UID列表分片,对总任务进行分片处理。之后将分片任务分发给任务池,执行各个分片任务。最后,发布任务汇聚请求。其缺点是虽然优化了房间内用户遍历的问题,但是同样需要对uid位于哪个集群进行计算。
用 go 实现连接服务器,采用kafka开源库进行集群中的消息分发,但是未提及分发算法。
综合上述分析可知,现有技术中存在以下问题需要解决:
1) 分发延迟问题。传统的im 在广播消息的时候,需要对房间内的所有用户进行遍历。然后给房间内的用户发送消息。房间内人数多的时候--例如1000万,传统方案会带来消息分发的延迟。
2) 全局表维护问题。对于集群来说,需要单独的服务维护一个全局的用户列表。用户登录时会导致全局的用户列表会有变动,同时也会限制登陆的速度。
3) 不易扩容问题。对类似于 emqttd 这样的软件结构来说,每个节点都需要复制一份全局的用户结构表。
发明内容
本发明所要解决的技术问题是,针对现有技术不足,提供一种IM集群中的多级消息广播方法及***,降低消息分发延迟,简化集群扩容,扩大集群规模。
为解决上述技术问题,本发明所采用的技术方案是:一种IM集群中的多级消息广播方法,包括以下步骤:
1)用户Uid1连接IM1节点并上报房间号RoomId1,用户Uid2连接IM1节点并上报房间号RoomId2,用户Uid3连接IM1节点并上报房间号RoomId1,用户Uid4连接IM2节点并上报房间号RoomId1;
2)消息中间件MQ同时给IM1节点和IM2节点发送房间号为RoomId1的msg1消息,消息内容简写为{ RoomId1, msg1 };
3)IM1节点收到消息{RoomId1,msg1}后,查找RoomId1下面的所有用户列表,再依次通过socket套接字把消息msg1发送给用户 Uid1 和用户 Uid3;IM2节点收到消息{RoomId1,msg1}后,查找RoomId1房间下的用户列表,IM2节点通过socket套接字把msg1消息下发给用户Uid4。
步骤1)中,各用户连接相应节点并上报房间号的具体操作过程包括:用户Uid连接IM节点,并订阅自己所在的房间号RoomId,被连接的 IM 节点判断维护的用户列表RoomUidList中是否存在RoomId的键key;如果有,把该用户Uid加入到RoomId结构对应的set数据结构中;如果没有,用户列表RoomUidList创建一个新的键值对,其中键key为RoomId,值value为空的set数据结构,并且把Uid加入到RoomId 指向的set数据结构中;其中用户Uid是指用户Uid1,Uid2,Uid3和用户Uid4;IM节点是指IM1节点和IM2节点。步骤3)之后,还执行如下操作:用户Uid1,Uid2,Uid3退出IM1节点,用户Uid4退出IM2节点。本发明中,用户退出相应节点的具体实现过程为:用户Uid找到该用户Uid对应的RoomId并从 RoomId中删除这个用户Uid。由于进入房间不需要在全局表上增加数据,而是在单个IM节点维护的数据表上增加数据,所以本发明的加入和退出操作相对现有的全局表方案速度更快。
相应地,本发明还提供了一种IM集群中的多级消息广播***,其包括:
用户Uid1,用于连接IM1节点并上报房间号RoomId1;
用户Uid2,用于连接IM1节点并上报房间号RoomId2;
用户Uid3,用于连接IM1节点并上报房间号RoomId1;
用户Uid4,用于连接IM2节点并上报房间号RoomId1;
消息中间件MQ,用于同时给IM1节点和IM2节点发送房间号为RoomId1的msg1消息,消息内容简写为{ RoomId1, msg1 };
消息收发单元,用于在IM1节点收到消息{RoomId1,msg1}后,查找RoomId1下面的所有用户列表,再依次通过socket套接字把消息msg1发送给用户 Uid1 和用户 Uid3;IM2节点收到消息{RoomId1,msg1}后,查找RoomId1房间下的用户列表,IM2节点通过socket套接字把msg1消息下发给用户Uid4。
还包括:
退出单元,用于在消息收发单元操作完成后,使用户Uid1,Uid2,Uid3退出IM1节点,用户Uid4退出IM2节点。
与现有技术相比,本发明所具有的有益效果为:本发明无需查找全局用户表,只需要查找单个IM节点上面的用户列表,因此彻底解决了分发延迟的问题;节点间无任何关联,所以集群扩容非常简单;本发明采用二级分发方式,轻易即可达到千万级集群规模。
附图说明
图1为本发明IM节点中RoomMap数据结构;
图2为本发明IM节点中RoomUidList数据结构;
图3为本发明用户登录流程图;
图4为本发明用户退出流程图;
图5为本发明消息分发流程图。
具体实施方式
1) IM节点中RoomMap数据结构详细说明
对照图1。每个IM节点维护一张 Uid 与 RoomId 对应的map映射表,命名为RoomMap,后面以RoomMap表示。这个结构用于存储该用户位于哪个房间,RoomMap为多对一的关系,多个Uid可以映射到同一个RoomId。
2) IM节点中RoomUidList数据结构详细说明
对照图2。RoomUidList 为map 数据结构,key 为 RoomId,也就是房间号,value 为set,set中的数据为Uid。该结构用于存储房间内有哪些用户,假设Uid1、Uid2、Uid3 属于房间号RoomId1,Uid4、Uid5属于RoomId2,Uid6属于RoomId3。那么其数据结构就如图2所示。
3) 用户加入房间算法步骤描述
用户Uid连接IM节点:并且订阅自己所在的房间号RoomId。被连接的 IM 判断维护的RoomUidList中是否存在RoomId的key。如果有,把该用户Uid加入到RoomId结构对应的map中。如果没有,RoomUidList创建一个新的key RoomId,value为空的map,并且把Uid加入到RoomId 指向的map中。
uid1加入到RoomId1步骤演示如下(参照图 3):
步骤1:增加映射关系 uid1 -> RoomId1;
步骤2:找到 RoomId1下的Uid列表,将Uid1添加到RoomId1所指set。如果不存在RoomId1,创建新的 RoomId1 和 RoomId1所对应set,并且把 Uid1 加入到 set。
4) 用户退出房间算法步骤描述
用户Uid退出IM节点:找到Uid对应的RoomId并从 RoomId 中删除这个 Uid。
步骤演示如下:(参照图 4)
步骤1:通过 Uid1 找到对应的RoomId1并且找到RoomId1对应set,删除 Uid1。
如果删除后set为空,删除 RoomId1和set对应关系,并删除该set。
步骤2:通过Uid1找到 RoomId,移除映射关系uid1 -> RoomId1。
5) 消息分发算法步骤描述
业务服务器对IM集群进行房间RoomId的消息广播:消息中间件 MQ 对所有连接上的IM 节点进行第一层消息广播,所有的 IM 节点都能收到一份同样的消息拷贝。由于 IM节点和消息中间件 MQ 位于同一个内网网段,并且基于直播弹幕这种特殊场景——发布的弹幕总数少,广播的用户量多。所以给所有 IM节点分发的这一份消息的消耗非常小,基本上对***没有影响。
具体步骤如下:(参照图5)
步骤1:Uid1 连接 IM1上报房间号RoomId1,Uid2连接IM1上报房间号RoomId2,Uid3连接IM1,上报房间号RoomId1,Uid4连接IM2上报房间号RoomId1;
步骤2:消息中间件MQ同时下发消息{RoomId1,msg1}给IM1和IM2;
步骤3:IM1收到{RoomId1,msg1}之后,查找RoomId1下面的所有用户列表。找到用户列表[Uid1,Uid3] ,通过套接字socket依次将消息msg1发送给Uid1和Uid3。IM2收到msg1,查找RoomId1下的列表,得到uid4,通过套接字socket将消息msg1发送给Uid4。
6) 总结
IM只存储连接到他本身这个节点上的用户与房间关系列表。所以消息分发的速度基本上就是当前节点上所有用户的分发速度。假如有1000万用户在线,有1000个节点,那么平均每个节点只要分发1万个用户。相较于传统的im,比要按顺序扫描这 1000 万个用户要快得多。从而降低了消息分发延迟。
节点间没有任何依赖,其中一个节点崩溃了,将只会影响到连接到该节点的用户,并不会干扰到其他的节点。同时也意味着,扩容的时候直接复制一样的镜像就行。以此为基础,能够轻松构建自动扩容***。由于上层有一个MQ构成二级分发***。对MQ来说只需要达到1000的分发能力,就能分发给1000个IM节点,一个节点连接 10000 个用户,就能达到千万的规模。通过对Redis(key-value存储***)组件的pub/sub功能进行压测,1秒钟分发3个包,能够轻松分发给1000个连接。
Claims (10)
1.一种IM集群中的多级消息广播方法,其特征在于,包括以下步骤:
1)用户连接IM节点并上报房间号;
2)消息中间件MQ给IM节点发送房间号为步骤1)中房间号的消息;
3)IM节点收到消息后,查找该房间号下面的所有用户列表,再依次通过socket套接字把消息发送给所述用户。
2.根据权利要求1所述的IM集群中的多级消息广播方法,其特征在于,所述用户数量为4个,所述IM节点数量为2个;执行步骤1)时,第一用户Uid1连接IM1节点并上报房间号RoomId1,第二用户Uid2连接IM1节点并上报房间号RoomId2,第三用户Uid3连接IM1节点并上报房间号RoomId1,第四用户Uid4连接IM2节点并上报房间号RoomId1。
3.根据权利要求2所述的IM集群中的多级消息广播方法,其特征在于,执行步骤2)时,所述消息中间件MQ同时给IM1节点和IM2节点发送房间号为RoomId1的msg1消息,消息内容简写为{ RoomId1, msg1 }。
4.根据权利要求3所述的IM集群中的多级消息广播方法,其特征在于,执行步骤3)时,IM1节点收到消息{RoomId1,msg1}后,查找RoomId1下面的所有用户列表,再依次通过socket套接字把消息msg1发送给第一用户 Uid1 和第二用户 Uid3;IM2节点收到消息{RoomId1,msg1}后,查找RoomId1房间下的用户列表,IM2节点通过socket套接字把msg1消息下发给第四用户Uid4。
5.根据权利要求1所述的IM集群中的多级消息广播方法,其特征在于,步骤1)中,用户连接IM节点并上报房间号的具体操作过程包括:用户Uid连接IM节点,并订阅自己所在的房间号RoomId,被连接的 IM 节点判断维护的用户列表RoomUidList中是否存在RoomId的键key;如果有,把该用户Uid加入到RoomId结构对应的set数据结构中;如果没有,用户列表RoomUidList创建一个新的键值对,其中键key为 RoomId,值value为空的set数据结构,并且把Uid加入到RoomId 指向的set数据结构中。
6.根据权利要求1所述的IM集群中的多级消息广播方法,其特征在于,步骤3)之后,还执行如下操作:用户退出IM节点。
7.根据权利要求6所述的IM集群中的多级消息广播方法,其特征在于,用户退出IM节点的具体实现过程为:用户Uid找到该用户Uid对应的RoomId并从 RoomId 中删除这个用户Uid。
8.一种IM集群中的多级消息广播***,其特征在于,包括:
用户,用于连接IM节点并上报房间号;
消息中间件MQ,用于给IM节点发送房间号为上述房间号的消息;
消息收发单元,用于在IM节点收到消息后,查找所述房间号下面的所有用户列表,再依次通过socket套接字把消息发送给用户 Uid。
9.根据权利要求8所述的IM集群中的多级消息广播***,其特征在于,还包括:
退出单元,用于在消息收发单元操作完成后,使用户退出IM节点。
10.根据权利要求8所述的IM集群中的多级消息广播***,其特征在于,所述用户包括第一用户Uid1,第二Uid2,第三Uid3和第四用户Uid4;所述IM节点包括IM1节点和IM2节点:第一用户Uid1,用于连接IM1节点并上报房间号RoomId1;
第二用户Uid2,用于连接IM1节点并上报房间号RoomId2;
第三用户Uid3,用于连接IM1节点并上报房间号RoomId1;
第四用户Uid4,用于连接IM2节点并上报房间号RoomId1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810147967.0A CN108282396B (zh) | 2018-02-13 | 2018-02-13 | 一种im集群中的多级消息广播方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810147967.0A CN108282396B (zh) | 2018-02-13 | 2018-02-13 | 一种im集群中的多级消息广播方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108282396A true CN108282396A (zh) | 2018-07-13 |
CN108282396B CN108282396B (zh) | 2022-02-22 |
Family
ID=62808515
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810147967.0A Active CN108282396B (zh) | 2018-02-13 | 2018-02-13 | 一种im集群中的多级消息广播方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108282396B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109068183A (zh) * | 2018-08-08 | 2018-12-21 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种直播弹幕分发方法及装置 |
CN110650202A (zh) * | 2019-09-26 | 2020-01-03 | 支付宝(杭州)信息技术有限公司 | 通信交互方法、装置及电子设备 |
CN110881041A (zh) * | 2019-11-28 | 2020-03-13 | 杭州涂鸦信息技术有限公司 | 一种连接方法、mqtt客户端和mqtt服务端 |
CN111478781A (zh) * | 2019-01-24 | 2020-07-31 | 北京京东尚科信息技术有限公司 | 一种消息广播的方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101849236A (zh) * | 2007-07-23 | 2010-09-29 | 香港中文大学 | 利用基因组测序诊断胎儿染色体非整倍性 |
CN101895406A (zh) * | 2010-06-23 | 2010-11-24 | 中兴通讯股份有限公司 | 一种移动流媒体的直播服务提供方法及*** |
CN105391563A (zh) * | 2015-11-26 | 2016-03-09 | 广州酷狗计算机科技有限公司 | 信息通知方法及装置 |
CN105871996A (zh) * | 2015-12-15 | 2016-08-17 | 乐视致新电子科技(天津)有限公司 | 消息推送***和方法 |
CN106534216A (zh) * | 2016-12-30 | 2017-03-22 | 上海幻电信息科技有限公司 | 一种服务器部署结构 |
CN107438098A (zh) * | 2017-07-17 | 2017-12-05 | 网宿科技股份有限公司 | 一种动态内容分发方法及其*** |
-
2018
- 2018-02-13 CN CN201810147967.0A patent/CN108282396B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101849236A (zh) * | 2007-07-23 | 2010-09-29 | 香港中文大学 | 利用基因组测序诊断胎儿染色体非整倍性 |
CN101895406A (zh) * | 2010-06-23 | 2010-11-24 | 中兴通讯股份有限公司 | 一种移动流媒体的直播服务提供方法及*** |
CN105391563A (zh) * | 2015-11-26 | 2016-03-09 | 广州酷狗计算机科技有限公司 | 信息通知方法及装置 |
CN105871996A (zh) * | 2015-12-15 | 2016-08-17 | 乐视致新电子科技(天津)有限公司 | 消息推送***和方法 |
CN106534216A (zh) * | 2016-12-30 | 2017-03-22 | 上海幻电信息科技有限公司 | 一种服务器部署结构 |
CN107438098A (zh) * | 2017-07-17 | 2017-12-05 | 网宿科技股份有限公司 | 一种动态内容分发方法及其*** |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109068183A (zh) * | 2018-08-08 | 2018-12-21 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种直播弹幕分发方法及装置 |
CN111478781A (zh) * | 2019-01-24 | 2020-07-31 | 北京京东尚科信息技术有限公司 | 一种消息广播的方法和装置 |
CN111478781B (zh) * | 2019-01-24 | 2022-11-08 | 北京京东尚科信息技术有限公司 | 一种消息广播的方法和装置 |
CN110650202A (zh) * | 2019-09-26 | 2020-01-03 | 支付宝(杭州)信息技术有限公司 | 通信交互方法、装置及电子设备 |
CN110881041A (zh) * | 2019-11-28 | 2020-03-13 | 杭州涂鸦信息技术有限公司 | 一种连接方法、mqtt客户端和mqtt服务端 |
Also Published As
Publication number | Publication date |
---|---|
CN108282396B (zh) | 2022-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11949588B2 (en) | Large-scale real-time multimedia communications | |
CN108282396A (zh) | 一种im集群中的多级消息广播方法及*** | |
CN100490425C (zh) | 组播网络部署方法及组播网络 | |
Shen et al. | Peer-to-peer media streaming: Insights and new developments | |
CN100461740C (zh) | 一种客户端节点网络拓扑构造方法及流媒体分发*** | |
CN106302616A (zh) | 网络唤醒方法、远程服务器和网络交换设备 | |
CN107317707B (zh) | 一种基于点覆盖集的sdn网络拓扑管理方法 | |
CN108600322B (zh) | 基于铁路视频技术规范的综合视频监控云服务***及方法 | |
CN104509073A (zh) | 在软件定义的网络中发现ip多播组成员 | |
WO2011026430A1 (zh) | 内容分发网络中数据同步的方法及*** | |
WO2018121201A1 (zh) | 分布式集群服务结构及节点协同方法和装置、终端及介质 | |
CN110516005A (zh) | 一种分布式数据库快速同步***及方法 | |
Li et al. | GBC3: A versatile cube-based server-centric network for data centers | |
CN111478793B (zh) | 一种业务请求的处理方法、装置、终端设备和存储介质 | |
CN105721328B (zh) | 一种vrrp负载均衡的方法、装置和路由器 | |
CN111064591B (zh) | 数据汇聚方法、装置、设备、存储介质和*** | |
CN110460482B (zh) | 流量获取方法、装置、服务器及介质 | |
CN111737029A (zh) | 一种服务端、数据推送方法、数据推送*** | |
CN102694833A (zh) | 多播树建立方法及多播***中的服务器和节点 | |
KR100435985B1 (ko) | 투표를 활용한 무정지 서비스 시스템 및 그 시스템에서의정보 갱신 및 제공 방법 | |
Pu et al. | Practical implementation of an OPC UA multi-server aggregation and management architecture for IIoT | |
CN201904870U (zh) | Mcu负载均衡控制器及视频会议*** | |
WO2015043257A1 (zh) | 分布式cdn***的建链方法、***及计算机存储介质 | |
CN110474781B (zh) | 一种组播数据转发的方法及装置 | |
CN110730172B (zh) | 一种视频会议的实现方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |