[发明专利]进行通信的方法和通信设备有效
申请号: | 201810576190.X | 申请日: | 2018-06-05 |
公开(公告)号: | CN108874560B | 公开(公告)日: | 2022-09-09 |
发明(设计)人: | 王磊;李革委 | 申请(专利权)人: | 腾讯音乐娱乐科技(深圳)有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54 |
代理公司: | 北京三高永信知识产权代理有限责任公司 11138 | 代理人: | 滕一斌 |
地址: | 518000 广东省深圳市*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 进行 通信 方法 设备 | ||
本发明提供了一种进行通信的方法和通信设备,属于计算机技术领域。所述方法包括:在将第一消息写入消息队列时,根据所述第一消息的数据量,确定所述第一消息占用所述消息队列中数据块的数目;将所述消息队列对应的写偏移更新为当前对应所述消息队列存储的写偏移与所述数目之和,其中,所述写偏移用于指示当前已经写入数据的数据块的最大索引号;根据更新后的写偏移和所述数目,确定所述第一消息占用所述消息队列中的数据块;将所述第一消息写入确定出的数据块。采用本发明,可以节约存储空间。
技术领域
本发明涉及计算机技术领域,特别涉及一种进行通信的方法和装置。
背景技术
随着计算机技术的发展,在进程间或线程间通信时,常常采用消息队列的方式进行通信。
相关技术中,在进程间通信时,发送消息的进程属于写进程,接收消息的进程属于读进程,在共享内存中可以创建一个消息队列,并设置消息队列中每个数据块所能存储数据的数据量大于或等于发送的消息的最大数据量。消息队列包括头部、索引区和数据区,头部区用于保存队列的总长度和每个数据块所能存储数据的数据量,索引区用于保存数据区的数据块的索引号,索引号与数据块一一对应,数据区包括多个数据块,用于保存数据。
写进程可以将消息写入数据块,读进程可以周期性检测有没有新的消息写入数据块,如果有,则可以读取数据块中的消息。这样,就可以实现进程间通信。
在实现本发明的过程中,发明人发现相关技术至少存在以下问题:
由于消息队列中每个数据块所能存储数据的数据量大于或等于发送的消息的最大数据量,所以对于数据量较小的消息仅占用一个数据块的一小部分存储空间,从而在消息的数据量大小不一的情况下,会导致浪费大量的存储空间。
发明内容
为了解决相关技术的问题,本发明实施例提供了一种进行通信的方法和通信设备。所述技术方案如下:
第一方面,提供了一种进行通信的方法,所述方法包括:
在将第一消息写入消息队列时,根据所述第一消息的数据量,确定所述第一消息占用所述消息队列中数据块的数目;
将所述消息队列对应的写偏移更新为当前对应所述消息队列存储的写偏移与所述数目之和,其中,所述写偏移用于指示当前已经写入数据的数据块的最大索引号;
根据更新后的写偏移和所述数目,确定所述第一消息占用所述消息队列中的数据块;
将所述第一消息写入确定出的数据块。
可选的,所述将所述第一消息写入确定出的数据块,包括:
在所述消息队列中,按照确定出的数据块的索引号从大到小的顺序,依次将所述第一消息写入所述确定出的数据块。
可选的,所述方法还包括:
当所述确定出的数据块中第一数据块写入完成时,更新所述第一数据块的索引号对应的状态标识为完成标识。
可选的,所述方法还包括:
当所述确定出的数据块中第二数据块写入完成时,根据所述确定出的数据块的索引号,存储所述第二数据块的索引号对应的序号。
可选的,所述方法还包括:
创建消息队列,其中,所述消息队列包括头部区、读写监控区、索引区和数据区,所述读写监控区用于存储所述写偏移和读偏移,所述读偏移用于指示当前已经读出数据的数据块的最大索引号,所述数据区包括至少一个数据块。
第二方面,提供了一种进行通信的方法,所述方法包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯音乐娱乐科技(深圳)有限公司,未经腾讯音乐娱乐科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810576190.X/2.html,转载请声明来源钻瓜专利网。