数据报文的转发方法和装置的制造方法
【专利摘要】本申请公开了数据报文的转发方法和装置。所述方法的一【具体实施方式】包括:接收数据报文,同时读取所述数据报文的首行数据内容的长度值;判断所述长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度;响应于所述长度值小于或者等于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分片段的形式读取;响应于所述长度值大于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分行的形式读取;将读取的数据存放在用户缓存区中,当所述用户缓存区中的数据达到预设容量阈值,将所述用户缓存区中的数据发送给终端。该实施方式实现了快速、高效的转发数据报文。
【专利说明】
数据报文的转发方法和装置
技术领域
[0001]本申请涉及计算机技术领域,具体涉及互联网技术领域,尤其涉及数据报文的转发方法和和装置。
【背景技术】
[0002]数据报文,是通过一定的技术标准或协议,在互联网中用于交换与传输的数据单元。数据报文中包含了将要发送的完整的数据信息,其长短不一致,长度不限且可变。数据报文的高效转发可提高数据的传输速度,合理利用资源。
[0003]然而,现有的数据报文的转发方式通常是在将数据报文全部读取完毕后再进行转发,使得终端处于空闲等待的时间过长,同时在读取数据报文时,不能很好的根据传输控制协议的长度合理的分配数据一次传输的长度,造成资源浪费,读取速度慢的问题。
【发明内容】
[0004]本申请的目的在于提出一种改进的数据报文的转发方法和装置,来解决以上【背景技术】部分提到的技术问题。
[0005]第一方面,本申请提供了一种数据报文的转发方法,所述方法包括:接收数据报文,同时读取所述数据报文的首行数据内容的长度值;判断所述长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度;响应于所述长度值小于或者等于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分片段的形式读取;响应于所述长度值大于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分行的形式读取;将读取的数据存放在用户缓存区中,当所述用户缓存区中的数据达到预设容量阈值,将所述用户缓存区中的数据发送给终端。
[0006]在一些实施例中,所述响应于所述长度值小于或者等于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分片段的形式读取,包括:根据所述最大报文段长度,将所述数据报文封装成至少一个数据片段;将所述至少一个数据片段中的每一个数据片段通过数据拷贝的方式拷贝到用户空间;在所述至少一个数据片段全部拷贝到所述用户空间之后,对所述至少一个数据片段解封装。
[0007]在一些实施例中,所述在所述至少一个数据片段全部拷贝到所述用户空间之后,对所述至少一个数据片段解封装,包括:从拷贝到所述用户空间的各个数据片段中按照拷贝时间从先到后的顺序依次确定每一个数据片段中各行的数据长度,其中,所述各行的数据长度是用于存放各行数据内容长度值的定长数据长度加上各行的数据内容长度;根据所述各行的数据长度,确定各行的数据内容。
[0008]在一些实施例中,所述从拷贝到所述用户空间的各个数据片段中按照拷贝时间从先到后的顺序依次确定每一个数据片段中各行的数据长度,包括:读取所述定长数据长度;通过读取所述定长数据长度,确定各行数据内容的长度值;由所述各行数据内容的长度值,确定所述各行数据内容的长度。
[0009]在一些实施例中,所述将所述至少一个数据片段中的每一个数据片段通过数据拷贝的方式拷贝到用户空间,包括:将所述数据片段通过直接存储器访问的方式从协议引擎拷贝到内核空间下的套接字缓冲区;将拷贝到套接字缓冲区中的数据片段拷贝到用户空间下的所述用户缓存区中。
[0010]在一些实施例中,所述响应于所述长度值大于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分行的形式读取,包括:按照行数从大到小的顺序依次读取所述数据报文的各行数据并存放在所述用户空间的用户缓存区中;根据读取到的所述各行的数据长度,确定各行的数据内容。
[0011]在一些实施例中,所述将读取的数据存放在用户缓存区中,当所述用户缓存区中的数据达到预设容量阈值,将所述用户缓存区中的数据发送给终端,包括:将读取的所述数据报文的数据长度值进行累加,直到达到所述用户缓存区的预设容量阈值;将达到所述预设容量阈值时读取的各行数据发送至终端,同时重置所述用户缓存区;继续读取所述数据报文中未读取完的数据,并存放在重置后的用户缓存区中。
[0012]第二方面,本申请提供了一种数据报文的转发装置,所述装置包括:接收单元,配置用于接收数据报文,同时读取所述数据报文的首行数据内容的长度值;判断单元,配置用于判断所述长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度;片段读取单元,配置用于响应于所述长度值小于或者等于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分片段的形式读取;行读取单元,配置用于响应于所述长度值大于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分行的形式读取;发送单元,配置用于将读取的数据存放在用户缓存区中,当所述用户缓存区中的数据达到预设容量阈值,将所述用户缓存区中的数据发送给终端。
[0013]在一些实施例中,所述片段读取单元包括:封装子单元,配置用于根据所述最大报文段长度,将所述数据报文封装成至少一个数据片段;拷贝子单元,配置用于将所述至少一个数据片段中的每一个数据片段通过数据拷贝的方式拷贝到用户空间;解封装子单元,配置用于在所述至少一个数据片段全部拷贝到所述用户空间之后,对所述至少一个数据片段解封装。
[0014]在一些实施例中,所述解封装子单元包括:数据长度确定模块,配置用于从拷贝到所述用户空间的各个数据片段中按照拷贝时间从先到后的顺序依次确定单个数据片段中各行的数据长度,其中,所述各行的数据长度是用于存放各行数据内容长度值的定长数据长度加上各行的数据内容长度;数据内容确定模块,配置用于根据所述各行的数据长度,确定各行的数据内容。
[0015]在一些实施例中,所述数据长度确定模块配置进一步用于:读取所述定长数据长度;通过读取所述定长数据长度,确定各行数据内容的长度值;由所述各行数据内容的长度值,确定所述各行数据内容的长度。
[0016]在一些实施例中,所述拷贝子单元配置进一步用于:将所述数据片段通过直接存储器访问的方式从协议引擎拷贝到内核空间下的套接字缓冲区;将拷贝到套接字缓冲区中的数据片段拷贝到用户空间下的所述用户缓存区中。
[0017]在一些实施例中,所述行读取单元配置进一步用于:按照行数从小到大的顺序依次读取所述数据报文的各行数据并存放在所述用户空间的用户缓存区中;根据读取到的所述各行的数据长度,确定各行的数据内容。
[0018]在一些实施例中,所述发送单元包括:累加子单元,配置用于将读取的数据长度值进行累加,直到达到所述用户缓存区的预设容量阈值;发送子单元,配置用于将达到所述预设容量阈值时读取的各行数据发送至终端,同时重置所述用户缓存区;读取子单元,配置用于继续读取所述数据报文中未读取完的数据,并存放在重置后的用户缓存区中。
[0019]本申请提供的数据报文的转发方法和装置,通过读取数据报文的首行数据内容的长度值,与传输控制协议依次所能传输的最大报文段长度进行比较,当数据报文的首行数据内容的长度值小于或者等于传输控制协议所能传输的最大报文长度时,对数据报文以分片段的形式读取;当数据报文的首行数据内容的长度值大于传输控制协议所能传输的最大报文段长度时,对数据报文以分行的形式读取,最后将读取的报文存放在用户缓存区中,当用户缓存区中的数据达到预设阈值时,将数据发送给终端,从而有效的利用了传输控制协议的资源,降低终端空闲等待的时间,实现了高效的对数据报文的转发。
【附图说明】
[0020]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
[0021]图1是本申请可以应用于其中的示例性系统架构图;
[0022]图2是根据本申请的数据报文的转发方法的一个实施例的流程图;
[0023]图3a和图3b是根据本申请的数据报文的转发方法的应用场景的示意图;
[0024]图4是根据本申请的数据报文的转发方法的又一个实施例的流程图;
[0025]图5是根据本申请的数据报文的转发装置的一个实施例的结构示意图;
[0026]图6是适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。
【具体实施方式】
[0027]下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
[0028]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
[0029]图1示出了可以应用本申请的数据报文的转发方法或数据报文的转发装置的实施例的示例性系统架构100。
[0030]如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
[0031]服务器105可以通过网络104与终端设备101、102、103交互,向终端设备101、102、
103发送数据报文信息等。终端设备101、102、103上可以安装有各种可以接收并读取数据报文的应用,例如网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
[0032]终端设备101、102、103可以是支持接收数据报文的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture Experts Group Aud1Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts GroupAud1 Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
[0033]服务器105可以是能够读取并转发各种数据报文的服务器,例如对终端设备101、102、103需要的数据报文进行读取并发送的后台服务器。后台服务器可以对终端设备需要的数据报文获取并进行处理后,将数据报文转发给终端设备。
[0034]需要说明的是,本申请实施例所提供的数据报文的转发方法一般由服务器105执行,相应地,数据报文的转发装置一般设置于服务器105中。
[0035]应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
[0036]继续参考图2,示出了根据本申请的数据报文的转发方法的一个实施例的流程200。所述的数据报文的转发方法,包括以下步骤:
[0037]步骤201,接收数据报文,同时读取所述数据报文的首行数据内容的长度值。
[0038]在本实施例中,数据报文的转发方法运行于其上的电子设备(例如图1所示的服务器)可以通过有线连接方式或者无线连接方式从存储有待获取的数据报文的数据库中接收数据报文,在接收到待获取的数据报文的同时,读取上述数据报文的首行数据内容的长度值。上述数据库包括但不限于MYSQL数据库、ORACLE数据库、DB2数据库。需要指出的是,上述无线连接方式可以包括但不限于3G/4G连接、WiFi连接、蓝牙连接、WiMAX连接、Zigbee连接、UffB(ultra wideband)连接、以及其他现在已知或将来开发的无线连接方式。
[0039]通常,数据报文中每一行的数据由该行的数据内容的长度与数据内容组成,例如在MYSQL数据库中,数据报文的每一行组成形式为data-length(数据内容的长度)+data-context (数据内容),其中数据内容的长度值存放在data-1 ength中,data_length的长度值为固定值。当接收MYSQL数据库中的报文时,首先读取首行的data-1 ength的长度值,从而确定数据内容的长度值,通过读取数据内容的长度值,确定数据内容。
[0040]步骤202,判断首行数据内容的长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度。
[0041]在本实施例中,基于步骤201中得到的首行数据内容的长度值,上述电子设备(例如图1所示的服务器)可以将上述首行数据内容的长度值与传输控制协议一次所能传输的最大报文段长度值进行比较,确定上述长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度值。其中,传输控制协议(TCP,Transmiss1n Control Protocol)是一种面向数据传输的、基于字节流的传输层通信协议。最大报文段长度(MSS ,MaximumSegment Size),是传输控制协议定义的一个选项,用于在传输控制协议建立连接时,收发双方协商通信时每一个报文段所能承载的最大数据长度。
[0042]步骤203,响应于首行数据内容的长度值小于或者等于传输控制协议一次所能传输的最大报文段长度,对数据报文的数据以分片段的形式读取。
[0043]在本实施例中,基于步骤202对上述长度值与传输控制协议一次所能传输的最大报文段长度的大小做出的判断,当上述长度值小于或者等于传输控制协议一次所能传输的最大报文段长度时,说明将上述首行数据全部放在传输控制协议上进行传输时,传输控制协议还有空闲资源,还能多承载一些数据进行传输,此时对所要读取的数据报文划分成多个片段,每次读取一个片段。
[0044]在本实施例的一些可选的实现方式中,对上述数据报文的数据以分片段的形式读取可以根据上述最大报文段长度,将上述数据报文切分成至少一个与最大报文段长度等长的数据片段,并对该数据片段进行封装;对数据片段封装完毕后,将上述数据片段全部拷贝到用户空间中,在该空间下预置独立的存储空间用来存放拷贝完毕的数据片段。其中用户空间为Linux系统中的普通应用程序运行的空间,在该空间下,处理器控制着应用程序对硬件的直接访问权以及对内存的非授权访问权;当上述数据片段全部拷贝到用户空间后,对上述数据片段进行解封装。
[0045]在本实施例的一些可选的实现方式中,对上述数据片段进行解封装的方式可以将拷贝到上述用户空间中的各个数据片段,按照拷贝时间从先到后的顺序,依次读取单个数据片段中各行的数据长度。各行的数据长度至少包括两部分,其中一部分为固定的长度值,用于存放各行数据内容的长度值,另一部分的长度值可变,用于存放数据内容。在读取上述各行的数据长度时,可以首先读取用于存放各行数据内容长度值的定长数据长度,通过读取该数据长度,确定各行的数据内容的长度值,通过获取各行的数据内容的长度值,确定各行的数据内容长度,同时读取该长度的数据,确定该行的数据内容。
[0046]在本实施例的一些可选的实现方式中,服务器可以通过直接存储器访问,将上述至少一个数据片段中的每一个数据片段从协议引擎拷贝到内核空间的套接字缓冲区中。其中,协议引擎(protocol engine)位于系统的直接存储器访问空间中,用来表征传输控制协议的引擎;套接字为源IP地址和目的IP地址以及源端口号和目的端口号的组合。套接字缓冲区位于内核空间(kerne I space)下,内核空间为Linux系统中的部分核心软件运行的空间,在该空间下的软件拥有访问硬件设备的所有权。在中央处理器(CPU ,CentralProcessing Unit)的控制下,服务器可以将拷贝到内核空间下套接字缓冲区的数据片段拷贝到用户空间。由此,在用户空间层面上,服务器将数据通过解封装的形式拷贝到用户空间下的用户缓存区中,其中,用户缓存区用来缓冲将要转发的数据报文。
[0047]步骤204,响应于首行数据内容的长度值大于传输控制协议一次所能传输的最大报文段长度,对数据报文的数据以分行的形式读取。
[0048]在本实施例中,基于步骤202对上述长度值与传输控制协议一次所能传输的最大报文段长度的大小做出的判断,当上述长度值大于传输控制协议一次所能传输的最大报文段长度时,上述传输控制协议无法一次将同一行的数据传送完毕,需要分多次传送,因此,服务器对上述数据报文中的数据以分行的形式读取。
[0049]在本实施例的一些可选的实现方式中,服务器对上述数据报文中的数据以分行的形式读取可以按照从前向后的顺序依次读取数据报文的各行数据长度,首先读取首行的用于存放各行数据内容长度值的定长数据长度,通过读取该数据长度,获取首行的数据内容的长度值,通过上述数据内容的长度值,读取首行的数据内容长度,由于首行的数据内容的长度值大于传输控制协议一次所能传输的最大报文长度,因此可以将首行的数据内容的长度分多次读取;读取完首行的数据长度后,继续读取下一行的数据长度,直到将上述数据报文中的数据全部读取完毕,将读取到的数据存放在上述用户空间下的存储空间中,再从存储空间拷贝到用户缓存区中;在数据读取的过程中,通过确定读取到的各行的数据长度,确定各行的数据内容。
[0050]步骤205,将读取的数据存放在用户缓存区中,当用户缓存区中的数据超过预设容量阈值,将所述用户缓存区中的数据发送给终端。
[0051]在本实施例中,服务器将步骤203中以分片段的形式读取的数据或者步骤204中以分行的形式读取的数据存放在用户缓存区中;在用户缓存区设置一定的容量阈值,当服务器读取的数据长度大于该容量阈值时,将用户缓存区缓存的数据发送给终端设备。
[0052]继续参见图3a和图3b,图3a和图3b是根据本实施例的数据报文的转发方法的应用场景的一个示意图。终端设备发出获取数据报文的指令后,数据库节点首先从MYSQL数据库中接收需要转发的数据报文,同时读取首行数据内容的长度;在MYSQL数据库中,传输控制协议所能传输的最大报文长度为16Mb。在图3a的应用场景中,当首行数据内容的长度为13Mb时,由于13MM、于16Mb,因此对数据报文采用分片段的方式读取;在图3b的应用场景中,当首行数据内容的长度为17Mb时,由于17Mb大于16Mb,因此对数据报文采用分行的形式读取。将图3a或者图3b读取的数据存入用户空间下的用户缓存区,对用户缓存区设定阈值为8Mb,当读取后放入用户缓存区的数据达到8Mb时,将已经达到阈值的8Mb数据发送给终端。
[0053]本申请的上述实施例提供的方法通过将报文的读取方式分为片段读取和行读取,合理利用传输控制协议的资源,同时对用户缓存区设置数据阈值,可以快速的转发数据报文,降低终端等待的时间。
[0054]进一步参考图4,其示出了数据报文的转发方法的又一个实施例的流程400。该数据报文的转发方法的流程400,包括以下步骤:
[0055]步骤401,接收数据报文,同时读取数据报文的首行数据内容的长度值。
[0056]在本实施例中,数据报文的转发方法运行于其上的电子设备(例如图1所示的服务器)可以通过有线连接方式或者无线连接方式从存储有待获取的数据报文的数据库中接收数据报文,在接收到待获取的数据报文的同时,读取上述数据报文的首行数据内容的长度值。
[0057]步骤402,判断首行数据内容的长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度。
[0058]在本实施例中,步骤402的具体处理可以参考图2对应实施例中步骤202,这里不再赘述。
[0059]步骤403,响应于首行数据内容的长度值小于或者等于传输控制协议一次所能传输的最大报文段长度,对数据报文的数据以分片段的形式读取。
[0060]在本实施例中,步骤403的具体处理可以参考图2对应实施例中步骤203,这里不再赘述。
[0061]步骤404,响应于首行数据内容的长度值大于传输控制协议一次所能传输的最大报文段长度,对数据报文的数据以分行的形式读取。
[0062]基于步骤402对上述长度值与传输控制协议一次所能传输的最大报文段长度的大小做出的判断,当上述长度值大于传输控制协议一次所能传输的最大报文段长度时,对上述数据报文中的数据以分行的形式读取。在读取的过程中,服务器可以分多次对数据报文中首行的数据进行读取,同时按照读取的行数从先到后的顺序依次将读取完的数据直接存放到用户缓存区,在向用户缓存区存放的过程中,以行为单位进行存放。
[0063]步骤405,将读取的数据长度值进行累加,直到达到用户缓存区的预设容量阈值。
[0064]在本实施例中,当上述的数据读取方式为分片段读取时,服务器对于存储在用户空间的数据片段进行拆分,获得原始的数据报文后,从拷贝到用户空间的各个数据片段中按照拷贝时间从先到后的顺序依次放入用户缓存区中,同时对放入用户缓存区的数据长度进行累加,直到达到用户缓存区的预设容量阈值。作为示例,整个数据报文被切分成2个数据片段,每个数据片段包含3行数据,服务器将首先拷贝到用户空间的数据片段以行为单位读取出来,同时存放到用户缓存区中,假设用户缓存区的预设阈值为9Mb,而读取的3行数据的长度值为6Mb,此时用户缓存区还有存储空间,服务器对后拷贝到用户空间的数据片段进行读取,该数据片段中最小的一行数据长度值为2Mb,将此2Mb的数据放入用户缓存区,此时存储在用户缓存区中的数据大小为8Mb,由于没有以行为单位的小于或等于IMb的数据,因此上述8Mb达到预设容量阈值,而剩下的未能放入用户缓存区的数据处于排队等候状态。
[0065]在本实施例中,当上述的数据读取方式为以分行的形式读取时,从首行开始,服务器按照行数从小到大的顺序依次将读取到数据存放在用户缓存区,直到数据缓存区达到预设的容量阈值,停止对数据的读取。
[0066]步骤406,将达到预设容量阈值时读取的各行数据发送至终端,同时重置用户缓存区。
[0067]在本实施例中,终端设备发出获取数据报文的指令后,一直处于空闲等待状态,直到接收到数据报文后,对数据进行处理;同时,终端设备在接受数据时,只能以行为单位对数据进行接收和处理。基于上述步骤405中存储在用户缓存区存储的数据,服务器将上述数据以行为单位发送给终端设备,将数据发送给终端设备以后,对上述用户缓存区进行重置操作,使得用户缓存区可以继续存储数据。
[0068]步骤407,继续读取数据报文中未读取完的数据,并存放在重置后的用户缓存区中。
[0069]基于步骤406中对用户缓存区进行重置后,对于以分片段的方式读取的数据,将步骤405中处于排队等待状态的数据放入用户缓存区中,并将放入缓存区的数据发送给终端;对于以分行的方式读取的数据,继续读取未读完的数据,同时将读取的数据存放在数据缓存区,数据缓存区达到预设阈值,将数据发送给终端。以此种方式一直将数据报文中的数据读取完毕。
[0070]从图4中可以看出,与图2对应的实施例相比,本实施例中的数据报文的转发方法的流程400突出了对用户缓存区的数据进行累加,同时对已经发出数据后的用户缓存区进行重置的步骤。由此,本实施例描述的方案可以更加快速有效的对数据报文进行读取和发送。
[0071]进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种数据报文的转发装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
[0072]如图5所示,本实施例所述的数据报文的转发装置500包括:接收单元501、判断单元502、片段读取单元503、行读取单元504和发送单元505。其中,接收单元501配置用于接收数据报文,同时读取所述数据报文的首行数据内容的长度值;判断单元502配置用于判断所述长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度;片段读取单元503配置用于响应于所述长度值小于或者等于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分片段的形式读取;行读取单元504配置用于响应于所述长度值大于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分行的形式读取;而发送单元505配置用于将读取的数据存放在用户缓存区中,当所述用户缓存区中的数据达到预设容量阈值,将所述用户缓存区中的数据发送给终端。
[0073]在本实施例中,数据报文的转发装置500的接收单元501可以通过有线连接方式或者无线连接方式从存储有待获取的数据报文的数据库中接收数据报文,在接收到待获取的数据报文的同时,读取上述数据报文的首行数据内容的长度值。
[0074]在本实施例中,基于接收单元501得到的数据报文的首行数据内容的长度值,上述判断单元502可以将首行数据内容的长度与传输控制协议一次所能传输的最大报文段长度进行比较,判断首行数据内容的长度是否小于传输控制协议一次所能传输的最大报文段长度。
[0075]在本实施例中,基于判断单元502对首行数据内容的长度与传输控制协议一次所能传输的最大报文段长度进行比较后作出的判断,上述片段读取单元503可以对长度值小于等于传输控制协议一次所能传输的最大报文段长度做出响应,此时对所要读取的数据报文划分成多个片段,每次读取一个片段。
[0076]在本实施例中,基于判断单元502对首行数据内容的长度与传输控制协议一次所能传输的最大报文段长度进行比较后作出的判断,上述行读取单元504可以对长度值大于传输控制协议一次所能传输的最大报文段长度做出响应,此时对对所要读取的数据报文以分行的形式读取,当一行的数据一次没有读取完毕时,可分多次进行读取。
[0077]在本实施例中,将片段读取单元503中以分片段的形式读取的数据或者行读取单元504中以分行的形式读取的数据存放到上述发送单元505的用户缓存区中;在用户缓存区设置一定的容量阈值,当读取的数据长度大于该容量阈值时,将用户缓存区缓存的数据发送给终端设备。
[0078]在本实施例的一些可选的实现方式中,上述数据报文的转发装置500的片段读取单元503进一步包括封装子单元(未示出),配置用于对上述数据报文的数据以分片段的形式读取可以根据上述最大报文段长度,将上述数据报文切分成至少一个与最大报文段长度等长的数据片段,并对该数据片段进行封装;拷贝子单元(未示出),配置用于对数据片段封装完毕后,将上述数据片段全部拷贝到用户空间中;解封装子单元(未示出),配置用于当上述数据片段全部拷贝到用户空间后,对上述数据片段进行解封装。解封装子单元进一步包括数据长度确定模块(未示出),配置用于将数据片段全部拷贝到用户空间之后,按照拷贝时间从先到后的顺序依次确定每一个数据片段中,各行的数据长度,其中各行的数据长度是用于存放各行数据内容长度值的定长数据长度加上各行的数据内容长度;数据内容确定模块(未示出),配置用于根据数据长度确定模块(未示出)确定的各行的数据长度值,确定各行的数据内容;数据长度确定模块(未示出)配置进一步用于首先确定上述定长数据长度,通过上述定长数据长度来确定数据内容的长度值,通过数据内容的长度值确定数据内容的长度。拷贝子单元(未示出)配置进一步用于首先将上述数据片段通过直接存储器访问的方式从协议引擎拷贝到内核空间下的套接字缓冲区,然后将拷贝到套接字缓冲区中的数据片段拷贝到用户空间下的用户缓存区中。
[0079]在本实施例的一些可选的实现方式中,上述数据报文的转发装置500的行读取单元504配置进一步用于
[0080]在本实施例的一些可选的实现方式中,上述数据报文的转发装置500的发送单元505,进一步包括累加子单元(未示出),配置用于针对读取到的数据长度值,将其进行累加,直到达到在用户缓存区中预先设定的数据容量阈值;发送子单元(未示出),配置用于将达到上述用户缓存区中预设容量阈值时的数据,以行为单位,将数据发送到终端,同时对用户缓存区进行重置;读取子单元(未示出),配置用于针对数据报文中未读取完的数据继续读取,同时读取后存放在重置后的用户缓存区中。
[0081]下面参考图6,其示出了适于用来实现本申请实施例的服务器的计算机系统600的结构示意图。
[0082]如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(R0M)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 60KROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线 604。
[0083]以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606 ;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分606;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口 605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
[0084]特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
[0085]附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0086]描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括接收单元、判断单元、片段读取单元、行读取单元和发送单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,接收单元还可以被描述为“接收数据报文的单元”。
[0087]作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当上述一个或者多个程序被一个设备执行时,使得上述设备:接收数据报文,同时读取所述数据报文的首行数据内容的长度值;判断所述长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度;响应于所述长度值小于或者等于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分片段的形式读取;响应于所述长度值大于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分行的形式读取;将读取的数据存放在用户缓存区中,当所述用户缓存区中的数据达到预设容量阈值,将所述用户缓存区中的数据发送给终端。
[0088]以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
【主权项】
1.一种数据报文的转发方法,其特征在于,所述方法包括: 接收数据报文,同时读取所述数据报文的首行数据内容的长度值; 判断所述长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度; 响应于所述长度值小于或者等于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分片段的形式读取; 响应于所述长度值大于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分行的形式读取; 将读取的数据存放在用户缓存区中,当所述用户缓存区中的数据达到预设容量阈值,将所述用户缓存区中的数据发送给终端。2.根据权利要求1所述的方法,其特征在于,所述响应于所述长度值小于或者等于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分片段的形式读取,包括: 根据所述最大报文段长度,将所述数据报文封装成至少一个数据片段; 将所述至少一个数据片段中的每一个数据片段通过数据拷贝的方式拷贝到用户空间;在所述至少一个数据片段全部拷贝到所述用户空间之后,对所述至少一个数据片段解封装。3.根据权利要求2所述的方法,其特征在于,所述在所述至少一个数据片段全部拷贝到所述用户空间之后,对所述至少一个数据片段解封装,包括: 从拷贝到所述用户空间的各个数据片段中按照拷贝时间从先到后的顺序依次确定每一个数据片段中各行的数据长度,其中,所述各行的数据长度是用于存放各行数据内容长度值的定长数据长度加上各行的数据内容长度; 根据所述各行的数据长度,确定各行的数据内容。4.根据权利要求3所述的方法,其特征在于,所述从拷贝到所述用户空间的各个数据片段中按照拷贝时间从先到后的顺序依次确定每一个数据片段中各行的数据长度,包括: 读取所述定长数据长度; 通过读取所述定长数据长度,确定各行数据内容的长度值; 由所述各行数据内容的长度值,确定所述各行数据内容的长度。5.根据权利要求2所述的方法,其特征在于,所述将所述至少一个数据片段中的每一个数据片段通过数据拷贝的方式拷贝到用户空间,包括: 将所述数据片段通过直接存储器访问的方式从协议引擎拷贝到内核空间下的套接字缓冲区; 将拷贝到套接字缓冲区中的数据片段拷贝到用户空间下的所述用户缓存区中。6.根据权利要求1所述的方法,其特征在于,所述响应于所述长度值大于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分行的形式读取,包括: 按照行数从大到小的顺序依次读取所述数据报文的各行数据并存放在所述用户空间的用户缓存区中; 根据读取到的所述各行的数据长度,确定各行的数据内容。7.根据权利要求1所述的方法,其特征在于,所述将读取的数据存放在用户缓存区中,当所述用户缓存区中的数据达到预设容量阈值,将所述用户缓存区中的数据发送给终端,包括: 将读取的所述数据报文的数据长度值进行累加,直到达到所述用户缓存区的预设容量阈值; 将达到所述预设容量阈值时读取的各行数据发送至终端,同时重置所述用户缓存区; 继续读取所述数据报文中未读取完的数据,并存放在重置后的用户缓存区中。8.一种数据报文的转发装置,其特征在于,所述装置包括: 接收单元,配置用于接收数据报文,同时读取所述数据报文的首行数据内容的长度值;判断单元,配置用于判断所述长度值是否小于或者等于传输控制协议一次所能传输的最大报文段长度; 片段读取单元,配置用于响应于所述长度值小于或者等于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分片段的形式读取; 行读取单元,配置用于响应于所述长度值大于所述传输控制协议一次所能传输的最大报文段长度,对所述数据报文的数据以分行的形式读取; 发送单元,配置用于将读取的数据存放在用户缓存区中,当所述用户缓存区中的数据达到预设容量阈值,将所述用户缓存区中的数据发送给终端。9.根据权利要求8所述的装置,其特征在于,所述片段读取单元,包括: 封装子单元,配置用于根据所述最大报文段长度,将所述数据报文封装成至少一个数据片段; 拷贝子单元,配置用于将所述至少一个数据片段中的每一个数据片段通过数据拷贝的方式拷贝到用户空间; 解封装子单元,配置用于在所述至少一个数据片段全部拷贝到所述用户空间之后,对所述至少一个数据片段解封装。10.根据权利要求9所述的装置,其特征在于,所述解封装子单元,包括: 数据长度确定模块,配置用于从拷贝到所述用户空间的各个数据片段中按照拷贝时间从先到后的顺序依次确定每一个数据片段中各行的数据长度,其中,所述各行的数据长度是用于存放各行数据内容长度值的定长数据长度加上各行的数据内容长度; 数据内容确定模块,配置用于根据所述各行的数据长度,确定各行的数据内容。11.根据权利要求10所述的装置,其特征在于,所述数据长度确定模块配置进一步用于: 读取所述定长数据长度; 通过读取所述定长数据长度,读取各行数据内容的长度值; 由所述各行数据内容的长度值,确定所述各行数据内容的长度。12.根据权利要求11所述的装置,其特征在于,所述拷贝子单元配置进一步用于: 将所述数据片段通过直接存储器访问的方式从协议引擎拷贝到内核空间下的套接字缓冲区; 将拷贝到套接字缓冲区中的数据片段拷贝到用户空间下的所述用户缓存区中。13.根据权利要求8所述的装置,其特征在于,所述行读取单元配置进一步用于: 按照行数从大到小的顺序依次读取所述数据报文的各行数据并存放在所述用户空间的用户缓存区中; 根据读取到的所述各行的数据长度,确定各行的数据内容。14.根据权利要求8所述的装置,其特征在于,所述发送单元,包括: 累加子单元,配置用于将读取的所述数据报文的数据长度值进行累加,直到达到所述用户缓存区的预设容量阈值; 发送子单元,配置用于将达到所述预设容量阈值时读取的各行数据发送至终端,同时重置所述用户缓存区; 读取子单元,配置用于继续读取所述数据报文中未读取完的数据,并存放在重置后的用户缓存区中。
【文档编号】H04L12/861GK106067865SQ201610355130
【公开日】2016年11月2日
【申请日】2016年5月25日 公开号201610355130.6, CN 106067865 A, CN 106067865A, CN 201610355130, CN-A-106067865, CN106067865 A, CN106067865A, CN201610355130, CN201610355130.6
【发明人】王天宇
【申请人】北京百度网讯科技有限公司