本发明专利技术适用于通信技术领域,提供了一种发送、接收消息的方法及装置,所述方法包括:为消息包申请内存缓冲区;在所述内存缓冲区内将消息类型、消息标识和消息长度封装成消息头;将消息头、消息内容包个数和消息内容包数组封装成消息包;消息分发线程扫描内存缓冲区,搜索已经封装完毕的消息包;将所述已经封装完毕的消息包分发到消息发送线程池的发送线程;根据预设的周期,把消息包发送到网络上。本发明专利技术通过对数据包按特定格式封装,实现了业务和网络通讯通信分离,解决了现有技术在云计算领域,由于不同的网络平台,不同业务和不同的协议导致的代码效率不高和消息效率不高的问题。
【技术实现步骤摘要】
本专利技术属于通信
,尤其涉及一种发送、接收消息的方法及装置。
技术介绍
在云计算
,云计算服务集群之间以及云计算服务集群与客户端之间进行通信,由于不同的网络平台,不同的业务和不同的协议导致信令间需要转换,开发人员需要考虑底层信令和具体业务,导致大量重复开发,代码效率不高,消息效率不高等。因此现有技术存在的问题是,在云计算领域,由于不同的网络平台,不同业务和不同的协议导致的数据传输效率不高和系统稳定性、可靠性不高的问题。
技术实现思路
本专利技术实施例的目的在于提供一种发送、接收消息的方法及装置,以解决现有技术在云计算领域,由于不同的网络平台,不同业务和不同的协议导致的数据传输效率不高和系统稳定性、可靠性不高的问题。本专利技术的实施例是这样实现的,一种发送消息的方法,所述方法包括以下步骤:为消息包申请内存缓冲区;在所述内存缓冲区内将消息类型、消息标识和消息长度封装成消息头;将消息头、消息内容包个数和消息内容包数组封装成消息包;消息分发线程扫描内存缓冲区,搜索已经封装完毕的消息包;将所述已经封装完毕的消息包分发到消息发送线程池的发送线程;根据预设的周期,发送线程把消息包发送到网络上。本专利技术的实施例是这样实现的,一种接收消息的方法,所述方法包括以下步骤:在套接字socket端口接收到消息包,所述消息包携带的消息头包含消息长度信息;根据socket端口信息,在套接字散列socket hash表中查询所述socket端口的消息完成队列句柄;根据所述消息完成队列句柄,判断消息包是否接收完成;当所述消息包接收完毕,处理所述消息包。本专利技术的实施例的另一目的在于提供一种发送消息的装置,所述装置包括:申请单元,用于为消息包申请内存缓冲区;第一封装单元,用于在所述内存缓冲区内将消息类型、消息标识和消息长度封装成消息头;第二封装单元,用于将消息头、消息内容包个数和消息内容包数组封装成消息包;扫描单元,用于消息分发线程扫描内存缓冲区,搜索已经封装完毕的消息包;第一发送单元,用于将所述已经封装完毕的消息包分发到消息发送线程池的发送线程;第二发送单元,用于根据预设的周期,把消息包发送到网络上。本专利技术的实施例的另一目的在于提供一种接收消息的装置,所述装置包括:接收单元,用于在套接字socket端口接收到消息包,所述消息包携带的消息头包含消息长度信息;查询单元,用于根据socket端口信息,在套接字散列socket hash表中查询所述socket端口的消息完成队列句柄;判断单元,用于根据所述消息完成队列句柄,判断消息包是否接收完成;处理单元,用于当所述消息包接收完毕,处理所述消息包。本专利技术实施例提供一种发送、接收消息的方法及装置,通过对数据包按特定格式封装,实现了业务和网络通讯通信分离,解决了现有技术在云计算领域,由于不同的网络平台,不同业务和不同的协议导致的数据传输效率不高和系统稳定性、可靠性不高的问题。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术第一实施例提供的消息头的组成结构图;图2是本专利技术第二实施例提供的消息包的组成结构图;图3是本专利技术图2中消息包在内存缓冲区的组成结构图;图4是本专利技术第三实施例提供的发送消息的方法的场景示意图;图5是本专利技术图4中发送消息的方法的实现流程图;图6是本专利技术第四实施例提供的接收消息的方法的实现流程图;图7是本专利技术第五实施例提供的发送消息的装置的模块结构图;图8是本专利技术第六实施例提供的接收消息的装置的模块结构图。具体实施例方式为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。本专利技术第一实施例提供了消息头的组成结构,如图1所示,具体包括:消息头包括消息类型、消息标识和消息长度,消息类型根据具体的业务确定,消息标识可以采用数字来标识,当然也可以改为用字母或者其他方式来标识,消息长度通过读取消息包所有字符获取;可选的,消息头还包括消息上下文,当通信双方多次交互时,消息上下文记录往返消息的标识和顺序等,首次发送的消息可以不包括消息上下文信息,首次发送的数据包上下文信息也可以设置为起始数字,如O。本专利技术第二实施例提供了消息包的组成结构,如图2所示,具体包括:消息包包括消息头、消息内容包个数和消息内容包数组,消息内容包数组是业务消息的基本单元,体现最小的业务消息功能,消息内容包个数是所述业务消息的基本单元的个数,可选的,消息包还包括消息结果,当对接收的消息包进行确认时,消息结果表示是否成功接收消息包。本专利技术第二实施例提供的图2中消息包在内存缓冲区(memcached)的组成结构示意图,如图3所示,具体包括:内存缓冲区存储了消息包还有消息发送状态信息。本专利技术第三实施例提供了发送消息的方法的示意图,如图4所示为所述发送消息的方法的场景示意图,具体包括:要发送的消息被放进消息存储内存池的内存缓冲区内,在所述内存缓冲区内被封装成消息包,所述消息包被消息分发线程发送到消息发送线程池,所述的线程池包括多个线程从线程I至线程n,所述多个线程用于轮流地、周期性地发送消息包到网络。在所述场景基础上,本专利技术第三实施例提供的发送消息的方法流程图,所述方法如图5所示,具体包括:SI1、为消息包申请内存缓冲区。S12、在所述内存缓冲区内将消息类型、消息标识和消息长度封装成消息头。其中,消息类型来自于业务数据,不同业务有不同的消息类型;消息标识用于标识不同的消息,当然还可以用数字、字母或者其他符号来表示。 S13、将消息头、消息内容包个数和消息内容包数组封装成消息包。S14、消息分发线程扫描内存缓冲区,搜索已经封装完毕的消息包。S15、将所述已经封装完毕的消息包分发到消息发送线程池的发送线程。S16、根据预设的周期,发送线程把消息包发送到网络上。需要说明的是,预设的周期可以是时间周期,也可以是根据包的数量来确定,或者是消息长度的总量,也可以根据其他条件来确定。可选的,实现S14的方法包括:消息分发线程扫描内存缓冲区;检测消息包的实际长度数据值,当所述消息包的实际长度数据值与所述消息头中的消息长度数值一致时,所述消息包为已经封装完毕的消息包。可选的,上述方法在步骤S15和/或S16中,还包括:记录消息包的发送状态,并将所述消息的发送状态存储到消息包所在的内存缓冲区。在本实施例中,记录消息包的发送状态是为了 了解哪些包被发送,哪些包没有被发送,为后续发送哪些包提供依据。可选的,所述方法还包括:在所述内存缓冲区内将消息上下文封装至消息头,将消息结果封装至消息包。在本实施例中,当通信双方多次交互时,消息上下文记录往返消息的标识和顺序坐寸ο本专利技术第四实施例提供了接收消息的方法,所述方法如图6所示,具体包括:S21、通过套接字socket端口接收消息包,所述消息包携带的消息头包含消息长度信息;S22、根据socket端口信息,在套接字散列socket hash表中查询所述socket端口的消息完成队本文档来自技高网...
【技术保护点】
一种发送消息的方法,其特征在于,所述方法包括:为消息包申请内存缓冲区;在所述内存缓冲区内将消息类型、消息标识和消息长度封装成消息头;将消息头、消息内容包个数和消息内容包数组封装成消息包;消息分发线程扫描内存缓冲区,搜索已经封装完毕的消息包;将所述已经封装完毕的消息包分发到消息发送线程池的发送线程;根据预设的周期,把消息包发送到网络上。
【技术特征摘要】
1.一种发送消息的方法,其特征在于,所述方法包括: 为消息包申请内存缓冲区; 在所述内存缓冲区内将消息类型、消息标识和消息长度封装成消息头; 将消息头、消息内容包个数和消息内容包数组封装成消息包; 消息分发线程扫描内存缓冲区,搜索已经封装完毕的消息包; 将所述已经封装完毕的消息包分发到消息发送线程池的发送线程; 根据预设的周期,把消息 包发送到网络上。2.如权利要求1所述的方法,其特征在于,所述消息分发线程扫描内存缓冲区,搜索已经封装完毕的消息包具体为: 消息分发线程扫描内存缓冲区; 检测消息包的实际长度数据值,当所述消息包的实际长度数据值与所述消息头中的消息长度数值一致时,所述消息包为已经封装完毕的消息包。3.如权利要求1或2所述的方法,其特征在于,所述方法还包括: 记录消息包的发送状态,并将所述消息的发送状态存储到消息包所在的内存缓冲区。4.如权利要求1所述的方法,其特征在于,所述方法还包括: 在所述内存缓冲区内将消息上下文封装至消息头,将消息结果封装至消息包。5.一种接收消息的方法,其特征在于,所述方法包括: 通过套接字socket端口接收消息包,所述消息包携带的消息头包含消息长度信息;根据socket端口信息,在套接字散列socket hash表中查询所述socket端口的消息完成队列句柄; 根据所述消息完成队列句柄,判断消息包是否接收完成; 当所述消息包接收完毕,处理所述消息包。6.如权利要求5所述的方法,其特征在于,所述方法还包括: 当无法在套接字散列socket hash表中查询到所述socket端口时,为所述socket端口在socket hash表中增加socket端口信息和分配消息完成队列句柄,并为消息包分配内存缓冲区。7.如权利要求5所述的方法,其特征在于,所述方法还包括: 当所述消息包被处理完毕后,处理的结果被发送到内存缓冲区,等待批处理存入数据库。8.如权利要求5所述的方法,其特征在于,所述方法还包括: 建立进程内存共享模型的共享内存机制; 将所述消息包存储至共享内存; 当进程运行奔溃时,从共享内存迅速恢复现场。9.一种发送消息的装置,其特征在于,所述装置包括: ...
【专利技术属性】
技术研发人员:陶金虎,
申请(专利权)人:TCL集团股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。