网络通信方法及设备技术

技术编号:20520079 阅读:16 留言:0更新日期:2019-03-06 03:49
本申请的目的是提供一种网络通信方法及设备,本申请序列化时,只处理请求中的参数信息,不拷贝数据块,从数据块的原来存储位置中对数据块进行直接引用,产生多段不连续的数据用于传输,避免了数据拷贝。相应的,对于带有大块数据的字节流,反序列化时,只需处理参数信息,不拷贝数据块,从内数据块的原来存储位置对数据块进行直接引用,避免了数据拷贝。对于写请求和读请求,本申请均能减少客户端通信代理和服务端通信代理的数据拷贝,消息中数据块数目越多,数据量越大,节省的数据拷贝的次数越多,能够显著的提升网络IO性能。

【技术实现步骤摘要】
网络通信方法及设备
本申请涉及计算机领域,尤其涉及一种网络通信方法及设备。
技术介绍
远程过程调用(RPC,RemoteProcedureCall),采用客户端(Client)/服务端(Server)模式。Client与Server之间的通信的内容是消息(Message),一般是便于业务处理的结构化实体。如图1所示,典型的RPC过程如下:(1)Client调用以本地调用方式向Clientstub(客户端通信代理)发起RPC请求(rpccall);(2)Clientstub(客户端通信代理)接收到调用后将请求消息序列化成一片连续的字节流(bundleArgs),以方便tcp传输;(3)Clientstub找到服务地址,并通过网络服务(NetworkService)将消息发送(send)到服务端(Server)对应的Serverstub(服务端通信代理);(4)Serverstub收到消息后,从字节流中反序列化出请求内容(unbundleArgs);(5)Serverstub根据反序列化出的请求内容调用本地的服务端(Server),处理请求(localcall);(6)本地的服务端执行请求并将处理结果(localreturn)返回给Serverstub作为响应;(7)Serverstub将返回结果序列化成字节流(bundleretvals),返回给客户端对应的Clientstub(客户端通信代理);(8)Clientstub接收到响应消息,并对所述响应消息进行反序列化(unbundleretvals);(9)所述响应消息进行反序列化(unbundleretvals)后发送到Client(rpcreturn),Client得到最终结果即响应消息。在上述过程中,发送消息前,要对消息序列化为字节流,用于tcp(TransmissionControlProtocol传输控制协议)传输;收到(receive)消息后,要对字节流反序列化,用于业务处理。具体地,对消息进行序列化和反序列化的过程如下所示:消息序列化过程中,依次将参数信息(params)进行编码,并和数据块(data)组成一片连续的字节流,供tcp传输使用。这里需要对数据块进行拷贝,数据块越多,拷贝越多。如图2所示的消息中,有两个数据块(data),共有两次拷贝。对于写IO(输入输出)请求,Client(客户端)存在发送消息序列化时,因为客户端要写数据到客户端,写请求中会有参数信息和数据,所以有数据拷贝(memcpy),例如,有如图2所示Data1、Data2拷贝;而Server(服务端)回复写响应序列化时,因为只是回复写入结果,回复信息里只有参数信息没有数据,所以无数据拷贝,例如,没有如图2所示Data1、Data2的拷贝;对于读IO(输入输出)请求,Client发送消息序列化时,因为写请求里只有参数信息没有数据,所以无数据拷贝,例如,没有如图2所示Data1、Data2的拷贝;而Server(服务端)回复读响应序列化时,因为要回复读到的数据,所以回复信息里会有参数信息和数据,所以有数据拷贝,例如,有如图2所示Data1、Data2拷贝。相应的,消息反序列化过程中,依次从字节流中解码出参数信息,并将数据块拷贝到合适的位置,用于业务处理。同样的,数据块越多,拷贝越多。如图3所示,是收到图2的消息后进行反序列化的过程。对于写IO(输入输出)请求,Server(服务端)收到写请求反序列化时,因为写请求中会有参数信息和数据,所以有数据拷贝(memcpy),例如,有如图3所示Data1、Data2拷贝;对于读IO(输入输出)请求,Client(客户端)收到响应反序列化时,因为要收到读到的数据,所以收到的回复信息里会有参数信息和数据,所以有数据拷贝,例如,有如图3所示Data1、Data2拷贝。上述方案中,消息中含有较多数据时,尤其是IOsize(输入输出数据量)较大的读写请求,数据拷贝(memcpy)的开销不容忽视。在IO关键路径,Client与Server两处都有数据拷贝,每处又至少数据拷贝一次(根据数据块数目而定),严重消耗cpu(处理器)和memory(存储器)资源,损耗性能,写延时增加,IOPS(Input/OutputOperationsPerSecond),即每秒进行读写操作的次数)降低。
技术实现思路
本申请的一个目的是提供一种网络通信方法及设备,解决现有的远程过程调用中数据拷贝的开销大的问题。根据本申请的一个方面,提供了一种客户端通信代理的网络通信方法,其中,该方法包括:从客户端接收请求消息并存储于第一位置,所述请求消息包括参数和数据块;从所述第一位置读取所述参数并进行处理后,存储于第二位置;从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,并发送至服务端通信代理。进一步的,上述客户端通信代理的网络通信方法中,从客户端接收请求消息并存储于第一位置,所述请求消息包括参数和数据块,包括:从客户端接收写请求消息并存储于内存中的第一位置,所述写请求消息包括未编码的写请求参数和未编码的写请求数据块;从所述第一位置读取所述参数并进行处理后,存储于第二位置,包括:从内存中的第一位置读取写请求参数并进行编码后,添加存储于内存中的第二位置。进一步的,上述客户端通信代理的网络通信方法中,从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,包括:按照所述请求消息中的请求参数和请求数据块的原始顺序,依次从所述第二位置读取请求参数、从所述第一位置读取请求数据块。进一步的,上述客户端通信代理的网络通信方法中,从所述第一位置读取所述参数并进行处理后,存储于第二位置,包括:从所述第一位置读取请求参数并进行处理;将参数和数据块在内存中的第一位置的信息添加存储于第二位置。进一步的,上述客户端通信代理的网络通信方法中,从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,包括:从所述第二位置,读取所述参数和数据块在内存中的第一位置的信息;根据所述第一位置的信息,从所述第一位置读取所述数据块。进一步的,上述客户端通信代理的网络通信方法中,所述方法,还包括:从客户端接收请求消息并存储于第三位置,所述请求消息包括参数;从所述第三位置读取所述参数并进行处理后,存储于第四位置;从所述第四位置读取所述参数,并发送至服务端通信代理。进一步的,上述客户端通信代理的网络通信方法中,从所述第四位置读取所述参数,并发送至服务端通信代理之后,还包括:从服务端通信代理接收对应于所述参数的响应消息,并存储于第五位置,其中,所述响应消息包括参数和数据块;从所述第五位置读取所述参数并进行处理后,存储于第六位置;从第五位置读取数据块以及从所述第六位置读取处理后的参数,并发送至客户端。进一步的,上述客户端通信代理的网络通信方法中,从第五位置读取数据块以及从所述第六位置读取处理后的参数,并发送至客户端,包括:按照响应消息中的参数和数据块的原始顺序,依次从第六、第五位置读取处理后的参数和数据块。进一步的,上述客户端通信代理的网络通信方法中,所述响应消息,由服务端通信代理从服务端接收,所述服务端基于从服务端通信代理接收到的处理后的参数生成所述响应消息。进一步的,上述客户端通信代理的本文档来自技高网
...

【技术保护点】
1.一种客户端通信代理的网络通信方法,其中,该方法包括:从客户端接收请求消息并存储于第一位置,所述请求消息包括参数和数据块;从所述第一位置读取所述参数并进行处理后,存储于第二位置;从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,并发送至服务端通信代理。

【技术特征摘要】
1.一种客户端通信代理的网络通信方法,其中,该方法包括:从客户端接收请求消息并存储于第一位置,所述请求消息包括参数和数据块;从所述第一位置读取所述参数并进行处理后,存储于第二位置;从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,并发送至服务端通信代理。2.根据权利要求1所述的方法,其中,从客户端接收请求消息并存储于第一位置,所述请求消息包括参数和数据块,包括:从客户端接收写请求消息并存储于内存中的第一位置,所述写请求消息包括未编码的写请求参数和未编码的写请求数据块;从所述第一位置读取所述参数并进行处理后,存储于第二位置,包括:从内存中的第一位置读取写请求参数并进行编码后,添加存储于内存中的第二位置。3.根据权利要求1所述的方法,其中,从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,包括:按照所述请求消息中的请求参数和请求数据块的原始顺序,依次从所述第二位置读取请求参数、从所述第一位置读取请求数据块。4.根据权利要求1或3所述的方法,其中,从所述第一位置读取所述参数并进行处理后,存储于第二位置,包括:从所述第一位置读取请求参数并进行处理;将参数和数据块在内存中的第一位置的信息添加存储于第二位置。5.根据权利要求4所述的方法,其中,从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,包括:从所述第二位置,读取所述参数和数据块在内存中的第一位置的信息;根据所述第一位置的信息,从所述第一位置读取所述数据块。6.根据权利要求1所述的方法,其中,所述方法,还包括:从客户端接收请求消息并存储于第三位置,所述请求消息包括参数;从所述第三位置读取所述参数并进行处理后,存储于第四位置;从所述第四位置读取所述参数,并发送至服务端通信代理。7.根据权利要求6所述的方法,其中,从所述第四位置读取所述参数,并发送至服务端通信代理之后,还包括:从服务端通信代理接收对应于所述参数的响应消息,并存储于第五位置,其中,所述响应消息包括参数和数据块;从所述第五位置读取所述参数并进行处理后,存储于第六位置;从第五位置读取数据块以及从所述第六位置读取处理后的参数,并发送至客户端。8.根据权利要求7所述的方法,其中,从第五位置读取数据块以及从所述第六位置读取处理后的参数,并发送至客户端,包括:按照响应消息中的参数和数据块的原始顺序,依次从第六、第五位置读取处理后的参数和数据块。9.根据权利要求7所述的方法,其中,所述响应消息,由服务端通信代理从服务端接收,所述服务端基于从服务端通信代理接收到的处理后的参数生成所述响应消息。10.根据权利要求7或8所述的方法,其中,从所述第五位置读取所述参数并进行处理后,存储于第六位置,包括:从所述第五位置读取所述参数并进行处理;分别将处理后的参数和数据块在内存中的第五位置的信息,存储于所述第六位置。11.根据权利要求10所述的方法,其中,从第五位置读取数据块以及从所述第六位置读取处理后的参数,包括:从所述第六位置,读取处理后的参数和数据块在所述第五位置的信息;根据所述第五位置的信息,从所述第五位置读取所述数据块。12.一种服务端通信代理的网络通信方法,其中,该方法包括:从客户端通信代理接收请求消息并存储于第一位置,所述请求消息包括参数和数据块;从所述第一位置读取所述参数并进行处理后,存储于第二位置;从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,并发送至服务端。13.根据权利要求12所述的方法,其中,从客户端通信代理接收请求消息并存储于第一位置,所述请求消息包括参数和数据块,包括:从客户端通信代理接收写请求消息并存储于内存中的第一位置,所述写请求消息包括编码后的写请求参数和未编码的写请求数据块;从所述第一位置读取所述参数并进行处理后,存储于第二位置,包括:从内存中的第一位置读取编码后的写请求参数并进行解码后,添加存储于内存中的第二位置。14.根据权利要求12所述的方法,其中,从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,包括:按照所述请求消息中参数和数据块的原始顺序,依次从内存中的第八、第一位置读取处理后的参数和数据块。15.根据权利要求12或14所述的方法,其中,从所述第一位置读取所述参数并进行处理后,存储于第二位置,包括:从所述第一位置读取参数并进行解码;分别将处理后的参数和数据块在所述第一位置的信息,存储于所述第二位置。16.根据权利要求15所述的方法,其中,从所述第一位置读取所述数据块以及从所述第二位置读取处理后的参数,并发送至服务端,包括:从所述第二位置,读取处理后的参数和数据块在所述第一位置的信息;根据所述第一位置的信息,从所述第一位置读取所述数据块。17.根据权利要求12所述的方法,其中,所述方法,还包括:从客户端通信代理接收请求消息并存储于第三位置,所述请求消息包括参数;从所述第三位置的读取参数并进行处理后,存储于第四位置;从所述第四位置读取处理后的参数并发送至服务端。18.根据权利要求17所述的方法,其中,从所述第四位置读取处理后的参数并发送至服务端之后,还包括:从服务端接收对应于所述处理后的参数的响应消息,并存储于第五位置,所述响应消息包括参数和数据块;从所述第五位置读取响应参数并进行处理后,存储于第六位置;从第五位置读取数据块以及从第六位置读取参数,并发送至客户端通信代理。19.根据权利要求18所述的方法,其中,从第五...

【专利技术属性】
技术研发人员:邢勇
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1