首页 / 专利库 / 电信 / 即时通信 / 一种高并发场景下即时通信消息传输方法

一种高并发场景下即时通信消息传输方法

阅读:708发布:2020-05-12

专利汇可以提供一种高并发场景下即时通信消息传输方法专利检索,专利查询,专利分析的服务。并且本 发明 涉及一种高并发场景下 即时通信 消息传输方法,采用全新协议架构进行消息发送,针对消息,定义并设定传输协议版本号、标志位、同步序列号位、命令码位、消息长度位,并结合消息进行顺序组合,构成数据包,由IM客户端基于socket向IM 服务器 进行发送,IM服务器接收数据包,再基于设计架构协议对数据包进行解析,依次获得其中各个消息,直至最终获得消息,完成即时通讯的消息传输,具有报文体量小,报文传输效率高的优点。,下面是一种高并发场景下即时通信消息传输方法专利的具体信息内容。

1.一种高并发场景下即时通信消息传输方法,用于实现IM客户端向IM服务器发送目标消息,其特征在于,包括如下步骤:
步骤A. IM客户端定义命令码位,且命令码位占一个字节;根据预设消息场景代码对应关系,设定目标消息所对应的命令码位为目标消息所对应使用场景的代码,然后进入步骤B;
步骤B. IM客户端定义消息长度位,且消息长度位占四个字节;设定目标消息所对应的消息长度位为目标消息的长度,然后进入步骤C;
步骤C. IM客户端定义标志位,且标志位占一个字节;判断目标消息为同步消息或压缩消息,若为同步消息,则设定目标消息所对应的标志位为预设同步标志数值,并进入步骤D;
若为压缩消息,则设定目标消息所对应的标志位为预设压缩标志数值;然后进入步骤E;
步骤D. IM客户端定义同步序列号位,且同步序列号位占四个字节;基于目标消息为同步消息,设定目标消息所对应同步序列号位为预设同步序列号数值,然后进入步骤F;
步骤E. IM客户端针对目标消息所对应的标志位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包,并进入步骤G;
步骤F. IM客户端针对目标消息所对应的标志位、同步序列号位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包,并进入步骤G;
步骤G. IM客户端将目标数据包发送至IM服务器,然后进入步骤H;
步骤H. IM服务器针对目标数据包进行解析、获得目标消息。
2.根据权利要求1所述一种高并发场景下即时通信消息传输方法,其特征在于:在一个实施方式中,所述步骤E中,IM客户端针对预设传输协议版本号,目标消息所对应的标志位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包;
所述步骤F中,IM客户端针对预设传输协议版本号,目标消息所对应的标志位、同步序列号位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包;
其中,预设传输协议版本号占一个字节。
3.根据权利要求1或2所述一种高并发场景下即时通信消息传输方法,其特征在于,在一个实施方式中,所述步骤G包括如下过程:
步骤G1. IM客户端与IM服务器通过socket网络编程技术建立tcp连接,然后进入步骤G2;
步骤G2. IM客户端将目标数据包发送到其与IM服务器之间的Socket Channel网络通道中,然后进入步骤G3;
步骤G3. IM服务器针对Socket Channel网络通道进行监听,并从其中获取目标数据包,然后进入步骤H。
4.根据权利要求2所述一种高并发场景下即时通信消息传输方法,其特征在于,在一个实施方式中,所述步骤H包括如下过程:
步骤H1. IM服务器检测目标数据包中是否包含传输协议版本号和标志位,是则进入步骤H2;否则判定该目标数据包不符合协议,丢弃该目标数据包;
步骤H2. IM服务器先读取目标数据包中的第一个字节,即传输协议版本号,接着读取目标数据包中的第二个字节,即标志位,然后进入步骤H3;
步骤H3. 若标志位为预设同步标志数值,则IM服务器读取目标数据包中的第三至六字节,即同步序列号位,并进入步骤H4;若标志位为预设压缩标志数值,则IM服务器先读取目标数据包中的第三字节,即命令码位,接着读取目标数据包中的第四至七字节,即消息长度位,然后进入步骤H5;
步骤H4. IM服务器先读取目标数据包中的第七字节,即命令码位,接着读取目标数据包中的第八至十一字节,即消息长度位,然后进入步骤H5;
步骤H5. IM服务器读取目标数据包中最后、满足消息长度位数值的数据,即为目标消息。
5.一种计算机设备,包括存储器、处理器,以及存储在存储器上、并可在处理器上运行的计算机程序,其特征在于:在一个实施方式中,所述处理器执行所述计算机程序、实现权利要求1至4中任一项所述方法中的步骤A至步骤G。
6.一种服务器可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时、实现权利要求1至4中任一项所述方法中的步骤H。

说明书全文

一种高并发场景下即时通信消息传输方法

技术领域

[0001] 本发明涉及一种高并发场景下即时通信消息传输方法,属于即使通信技术领域。

背景技术

[0002] jabber是一个开放源码形式组织产生的网络实时通信协议,第一个公开版本于2000年5月发行,jabber已经由IETF XMPP协议(RFC3290)标准化;2001年成立的jabber软件基金会于2007年更名为XMPP标准基金会,此协议由Jeremie Miller于1998年开始这个项目。Xmpp本为即时通讯量身定制的,但是该协议是基于xml stanza,协议虽然灵活,因为xml的元素节点,报文数据包体量确比较大,传输过程中的I/O较大,弱网下的测试结果不太理想。
[0003] 随着网络用户的基数越来远大,现有的IM系统对消息流转的速度要求越来越高,一个数据包体量更小,结构清晰,容易被开源使用的协议,越来越成为市场的需求。传统基于jabber的协议体系已渐渐不符合IM系统的基础体系结构,报文体量的过大,导致弱网等特殊场景下的可靠性无法保证。

发明内容

[0004] 本发明所要解决的技术问题是提供一种高并发场景下即时通信消息传输方法,采用全新协议架构进行消息发送,具有报文体量小,报文传输效率高的优点。
[0005] 本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种高并发场景下即时通信消息传输方法,用于实现IM客户端向IM服务器发送目标消息,包括如下步骤:步骤A. IM客户端定义命令码位,且命令码位占一个字节;根据预设消息场景代码对应关系,设定目标消息所对应的命令码位为目标消息所对应使用场景的代码,然后进入步骤B;
步骤B. IM客户端定义消息长度位,且消息长度位占四个字节;设定目标消息所对应的消息长度位为目标消息的长度,然后进入步骤C;
步骤C. IM客户端定义标志位,且标志位占一个字节;判断目标消息为同步消息或压缩消息,若为同步消息,则设定目标消息所对应的标志位为预设同步标志数值,并进入步骤D;
若为压缩消息,则设定目标消息所对应的标志位为预设压缩标志数值;然后进入步骤E;
步骤D. IM客户端定义同步序列号位,且同步序列号位占四个字节;基于目标消息为同步消息,设定目标消息所对应同步序列号位为预设同步序列号数值,然后进入步骤F;
步骤E. IM客户端针对目标消息所对应的标志位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包,并进入步骤G;
步骤F. IM客户端针对目标消息所对应的标志位、同步序列号位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包,并进入步骤G;
步骤G. IM客户端将目标数据包发送至IM服务器,然后进入步骤H;
步骤H. IM服务器针对目标数据包进行解析、获得目标消息。
[0006] 作为本发明的一种优选技术方案:所述步骤E中,IM客户端针对预设传输协议版本号,目标消息所对应的标志位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包;所述步骤F中,IM客户端针对预设传输协议版本号,目标消息所对应的标志位、同步序列号位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包;
其中,预设传输协议版本号占一个字节。
[0007] 作为本发明的一种优选技术方案,所述步骤G包括如下过程:步骤G1. IM客户端与IM服务器通过socket网络编程技术建立tcp连接,然后进入步骤G2;
步骤G2. IM客户端将目标数据包发送到其与IM服务器之间的Socket Channel网络通道中,然后进入步骤G3;
步骤G3. IM服务器针对Socket Channel网络通道进行监听,并从其中获取目标数据包,然后进入步骤H。
[0008] 作为本发明的一种优选技术方案,所述步骤H包括如下过程:步骤H1. IM服务器检测目标数据包中是否包含传输协议版本号和标志位,是则进入步骤H2;否则判定该目标数据包不符合协议,丢弃该目标数据包;
步骤H2. IM服务器先读取目标数据包中的第一个字节,即传输协议版本号,接着读取目标数据包中的第二个字节,即标志位,然后进入步骤H3;
步骤H3. 若标志位为预设同步标志数值,则IM服务器读取目标数据包中的第三至六字节,即同步序列号位,并进入步骤H4;若标志位为预设压缩标志数值,则IM服务器先读取目标数据包中的第三字节,即命令码位,接着读取目标数据包中的第四至七字节,即消息长度位,然后进入步骤H5;
步骤H4. IM服务器先读取目标数据包中的第七字节,即命令码位,接着读取目标数据包中的第八至十一字节,即消息长度位,然后进入步骤H5;
步骤H5. IM服务器读取目标数据包中最后、满足消息长度位数值的数据,即为目标消息。
[0009] 本发明所要解决的技术问题是提供一种计算机设备,用于执行所设计高并发场景下即时通信消息传输方法中的步骤A至步骤G,获得更加高效的报文传输效率。
[0010] 本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种计算机设备,包括存储器、处理器,以及存储在存储器上、并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序、实现权利要求1至4中任一项所述方法中的步骤A至步骤G。
[0011] 本发明所要解决的技术问题是提供一种服务器可读存储介质,用于执行所设计高并发场景下即时通信消息传输方法中的步骤H,获得更加高效的报文解析效率。
[0012] 本发明为了解决上述技术问题采用以下技术方案:本发明设计了一种服务器可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时、实现权利要求1至4中任一项所述方法中的步骤H。
[0013] 本发明所述一种高并发场景下即时通信消息传输方法,采用以上技术方案与现有技术相比,具有以下技术效果:本发明所设计高并发场景下即时通信消息传输方法,采用全新协议架构进行消息发送,针对消息,定义并设定传输协议版本号、标志位、同步序列号位、命令码位、消息长度位,并结合消息进行顺序组合,构成数据包,由IM客户端基于socket向IM服务器进行发送,IM服务器接收数据包,再基于设计架构协议对数据包进行解析,依次获得其中各个消息,直至最终获得消息,完成即时通讯的消息传输,具有报文体量小,报文传输效率高的优点。
附图说明
[0014] 图1是本发明设计高并发场景下即时通信消息传输方法的应用效果示意图。

具体实施方式

[0015] 下面结合说明书附图对本发明的具体实施方式作进一步详细的说明。
[0016] 本发明设计了一种高并发场景下即时通信消息传输方法,用于实现IM客户端向IM服务器发送目标消息,实际应用当中,具体包括如下步骤A至步骤H。
[0017] 步骤A. IM客户端定义命令码位,且命令码位占一个字节;根据预设消息场景代码对应关系,设定目标消息所对应的命令码位为目标消息所对应使用场景的代码,然后进入步骤B。
[0018] 实际应用当中,设计预设消息场景代码对应关系如下。
[0019] 1、握手请求:12、握手响应:2
3、鉴权请求:3
4、鉴权响应:4
5、登录请求:5
6、登录响应:6
7、进群请求:7
8、进群响应:8
9、进群通知:9
10、进群通知响应:10
11、聊天请求:11
12、聊天响应:12
13、心跳请求:13
14、关闭连接:14
15、撤销请求:15
16、撤销响应:16
17、获取用户请求:17
18、获取用户响应:18
19、获取聊天消息请求:19
20、获取聊天消息响应:20
21、获取朋友圈:21
22、获取朋友圈响应:22
23、获取文件请求:23
24、获取文件响应:24
25、消息撤回请求:25
26、消息撤回响应:26
27、Qos送达请求:30
28、Qos送达响应:31
步骤B. IM客户端定义消息长度位,且消息长度位占四个字节;设定目标消息所对应的消息长度位为目标消息的长度,然后进入步骤C。
[0020] 步骤C. IM客户端定义标志位,且标志位占一个字节;判断目标消息为同步消息或压缩消息,若为同步消息,则设定目标消息所对应的标志位为预设同步标志数值,并进入步骤D;若为压缩消息,则设定目标消息所对应的标志位为预设压缩标志数值;然后进入步骤E。
[0021] 实际应用当中,诸如设定预设同步标志数值为32,预设压缩标志数值为64。
[0022] 步骤D. IM客户端定义同步序列号位,且同步序列号位占四个字节;基于目标消息为同步消息,设定目标消息所对应同步序列号位为预设同步序列号数值,然后进入步骤F。
[0023] 步骤E. IM客户端针对预设传输协议版本号,目标消息所对应的标志位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包,并进入步骤G。
[0024] 步骤F. IM客户端针对预设传输协议版本号,目标消息所对应的标志位、同步序列号位、命令码位、消息长度位,以及目标消息进行顺序组合,构成目标数据包,并进入步骤G。
[0025] 预设传输协议版本号即表示针对目标消息所应用传输协议的版本号,占一个字节。
[0026] 步骤G. IM客户端将目标数据包发送至IM服务器,然后进入步骤H,实际应用当中,具体如下。
[0027] 步骤G1. IM客户端与IM服务器通过socket网络编程技术建立tcp连接,然后进入步骤G2。
[0028] 步骤G2. IM客户端将目标数据包发送到其与IM服务器之间的Socket Channel网络通道中,然后进入步骤G3。
[0029] 步骤G3. IM服务器针对Socket Channel网络通道进行监听,并从其中获取目标数据包,然后进入步骤H。
[0030] 步骤H. IM服务器针对目标数据包进行解析、获得目标消息。
[0031] 实际应用当中,步骤H进一步设计包括如下步骤H1至步骤H5。
[0032] 步骤H1. IM服务器检测目标数据包中是否包含传输协议版本号和标志位,是则进入步骤H2;否则判定该目标数据包不符合协议,丢弃该目标数据包。
[0033] 步骤H2. IM服务器先读取目标数据包中的第一个字节,即传输协议版本号,接着读取目标数据包中的第二个字节,即标志位,然后进入步骤H3。
[0034] 步骤H3. 若标志位为预设同步标志数值,则IM服务器读取目标数据包中的第三至六字节,即同步序列号位,并进入步骤H4;若标志位为预设压缩标志数值,则IM服务器先读取目标数据包中的第三字节,即命令码位,接着读取目标数据包中的第四至七字节,即消息长度位,然后进入步骤H5。
[0035] 步骤H4. IM服务器先读取目标数据包中的第七字节,即命令码位,接着读取目标数据包中的第八至十一字节,即消息长度位,然后进入步骤H5。
[0036] 步骤H5. IM服务器读取目标数据包中最后、满足消息长度位数值的数据,即为目标消息。
[0037] 上述技术方案所设计高并发场景下即时通信消息传输方法,采用全新协议架构进行消息发送,针对消息,定义并设定传输协议版本号、标志位、同步序列号位、命令码位、消息长度位,并结合消息进行顺序组合,构成数据包,由IM客户端基于socket向IM服务器进行发送,IM服务器接收数据包,再基于设计架构协议对数据包进行解析,依次获得其中各个消息,直至最终获得消息,完成即时通讯的消息传输,具有报文体量小,报文传输效率高的优点。
[0038] 将上述所设计高并发场景下即时通信消息传输方法,应用于实际当中,诸如聊天请求消息结构、鉴权请求消息结构、握手请求消息结构、登录请求消息结构、心跳请求消息结构、关闭、退出请求消息结构、获取用户信息请求消息结构、获取用户消息请求结构如下。
[0039]  1.聊天请求消息结构 { "from": "来源ID", "to": "目标ID", "cmd":"命令码(11)int类型", "createTime": "消息创建时间long类型", "msgType": "消息类型int类型(0:text、1:image、2:voice、3:vedio、4:music、5:news)", "chatType":"聊天类型int类型(0:未知,1:公聊,2:私聊)", "groupId":"群组id仅在chatType为(1)时需要,String类型", "content": "内容", "extras" : "扩展字段,JSON对象格式如:{'扩展字段名称':'扩展字段value'}" } 请求:COMMAND_CHAT_REQ(11) 响应:COMMAND_CHAT_RESP(12); 2.鉴权请求消息结构 { "cmd":"命令码(3)int类型", "token": "校验码" } 请求:COMMAND_AUTH_REQ(3) 响应:COMMAND_AUTH_RESP(4) ; 3.握手请求消息结构 { "cmd":"命令码(1)int类型", "hbyte":"握手1个字节" } 说明:请求:COMMAND_HANDSHAKE_REQ(1) 响应:COMMAND_HANDSHAKE_RESP(2) 4.登录请求消息结构 { "cmd":"命令码(5)int类型", "loginname": "用户名", "password": "密码", "token": "校验码(此字段可与logingname、password共存,也可只选一种方式)" } 请求:COMMAND_LOGIN_REQ(5) 响应:
COMMAND_LOGIN_RESP(6) 5.心跳请求消息结构 { "cmd":"命令码(13)int类型", "hbbyte":"心跳1个字节" } 请求:COMMAND_HEARTBEAT_REQ(13) 响应:COMMAND_HEARTBEAT_REQ(13) 6.关闭、退出请求消息结构 { "cmd":"命令码(14)int类型", "userid":"用户id" } 请求:COMMAND_CLOSE_REQ(14) 响应:无 7.获取用户信息请求消息结构 { "cmd":"命令码(17)int类型", "userid":"用户id(必填项)", "type":"获取类型(0:所有在线用户,1:所有离线线用户,2:所有用户[在线+离线])" } 请求:COMMAND_GET_USER_REQ(17) 响应:COMMAND_GET_USER_RESP(18) 8.获取用户消息请求结构 { "cmd":"命令码(19)int类型", "fromUserId":"消息发送用户id(此字段必须与userId一起使用,获取双方聊天消息),非必填", "userId":"当前用户id(必填字段),当只有此字段时,type必须为0,意思是获取当前用户所有离线消息(好友+群组)", "groupId":"群组id(此字段必须与userId一起使用,获取当前用户指定群组聊天消息),非必填", "beginTime":"消息区间开始时间Date毫秒数double类型,非必填", "endTime":"消息区间结束时间Date毫秒数double类型,非必填", "offset":"分页偏移量int类型,类似Limit 0,10 中的0,非必填", "count":"显示消息数量,类似Limit 0,10 中的10,非必填", "type":"消息类型(0:
离线消息,1:历史消息)" } 请求:COMMAND_GET_MESSAGE_REQ(19) 响应:COMMAND_GET_MESSAGE_RESP(20)。
[0040] 针对本发明所设计高并发场景下即时通信消息传输方法,进行实际应用测试。
[0041] 1、搭建tsung压测试服务:2、配置tsung测试脚本:
3、服务器配置如下:
选取一台内存8G,CPU 8核的机器作为服务器,并修改如下配置:
/etc/sysctl.conf
fs.file-max = 1048576
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
/etc/security/limits.conf
* soft nofile 1048576
* hard nofile 1048576
launchctl limit maxfiles 99999 99999
基于上述测试环境,应用本发明所设计高并发场景下即时通信消息传输方法进行测试,如图1所示,发现单台server保持的连接数为:600000左右,比同配置下基于xmpp的openfire、tigase测试结果提高30%。
[0042] 上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈