[发明专利]一种客户端与服务器之间的通信协议设计方法在审
申请号: | 202010688437.4 | 申请日: | 2020-07-16 |
公开(公告)号: | CN111935101A | 公开(公告)日: | 2020-11-13 |
发明(设计)人: | 谷冠飞 | 申请(专利权)人: | 北京首汽智行科技有限公司 |
主分类号: | H04L29/06 | 分类号: | H04L29/06 |
代理公司: | 北京世誉鑫诚专利代理有限公司 11368 | 代理人: | 李世端 |
地址: | 100026 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 客户端 服务器 之间 通信协议 设计 方法 | ||
本发明公开的客户端与服务器之间的通信协议设计方法,将Reactor模型分为主Reactor模型和从Reactor模型,设计两种心跳机制,将请求报文和返回报文对应的数据包的格式设置为包头、模块号、命令号、长度及数据,使用Protocol Buffers数据序列化机制,将通过proto文件定义的客户端信息和待传输的信息序列化,通过注解方式定义客户端与服务器通信时功能模块的各种动作指令,根据业务模块的指令标识去找到对应业务的操作者,由扫描器管理各个业务的操作者,定义业务类型的代码及业务错误的代码,采用动态可配方式维护业务类型的代码及业务错误的代码,形成客户端与服务器之间的通信协议,提高了通信效率,规避了粘包风险,节省了空间,灵活性较高,降低了人工成本。
技术领域
本发明涉及通信技术领域,具体涉及一种客户端与服务器之间的通信协议设计方法。
背景技术
目前的客户端和服务之间的通信协议,存在报文格式不规范、框架升级不方便、新增功能协议改动大、存在粘包风险及序列化占用空间大的缺陷且每次新增错误码都需要改动程序,灵活性较差,人工成本高且通信效率低。
发明内容
为解决现有技术的不足,本发明实施例提供了一种客户端与服务器之间的通信协议设计方法,该方法包括以下步骤:
将Reactor模型分为主Reactor模型和从Reactor模型,其中,主Reactor模型用于创建server socket并根据server socket接收客户端的连接请求并生成与客户端连接的socket,将socket分派给从Reactor模型;从Reactor模型负责分离多路已连接的socket,读写网络数据并将涉及业务处理功的任务扔给worker线程池完成;
利用IdleStateHandler心跳检测处理器,设计两种心跳机制;
将请求报文和返回报文对应的数据包的格式设置为包头、模块号、命令号、长度及数据;
使用Protocol Buffers数据序列化机制,将通过proto文件定义的客户端信息和待传输的信息序列化;
分别为设计扫描器、命令执行器、命令执行管理器设置注解,命令执行管理器控制业务代码,通过注解方式定义客户端与服务器通信时功能模块的各种动作指令;
根据业务模块的指令标识去找到对应业务的操作者,由扫描器管理各个业务的操作者;
定义业务类型的代码及业务错误的代码,采用动态可配方式维护业务类型的代码及业务错误的代码,形成客户端与服务器之间的通信协议。
优选地,该方法还包括:
设置各个业务模块设计请求报文及返回报文的格式为长度、字节。
优选地,从Reactor模型的个数与部署了应用的服务器的CPU的个数一致。
优选地,包头、模块号、命令号、长度及数据的长度分别为4个字节、2个字节、2个字节及4个字节。
优选地,所述worker线程池包括线程池模型bossGroup和线程池模型workGroup,其中,线程池模型bossGroup仅负接收连接请求并建立连接,线程池模型workGroup线程池仅负责基于IO通道处理业务数据。
本发明实施例提供的客户端与服务器之间的通信协议设计方法具有以下有益效果:
(1)借助Netty框架的selector机制,实现资源多路复用,一个线程可以服务多个请求,摒弃传统socket编程,提高了通信效率;
(2)规范了请求报文和返回报文对应的数据包的格式,规避了粘包风险;
(3)使用protocol buff数据序列化机制,节省了空间;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京首汽智行科技有限公司,未经北京首汽智行科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010688437.4/2.html,转载请声明来源钻瓜专利网。