CN116962512B - 报文处理方法、设备、存储介质和装置 - Google Patents
报文处理方法、设备、存储介质和装置 Download PDFInfo
- Publication number
- CN116962512B CN116962512B CN202311220488.4A CN202311220488A CN116962512B CN 116962512 B CN116962512 B CN 116962512B CN 202311220488 A CN202311220488 A CN 202311220488A CN 116962512 B CN116962512 B CN 116962512B
- Authority
- CN
- China
- Prior art keywords
- message
- service port
- read
- target
- target message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 16
- 239000000872 buffer Substances 0.000 claims abstract description 100
- 230000000903 blocking effect Effects 0.000 claims abstract description 77
- 238000012545 processing Methods 0.000 claims abstract description 62
- 238000000034 method Methods 0.000 claims abstract description 49
- 238000004891 communication Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 abstract description 30
- 230000005540 biological transmission Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 7
- 230000004044 response Effects 0.000 description 5
- 239000000306 component Substances 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/565—Conversion or adaptation of application format or content
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/60—Network streaming of media packets
- H04L65/65—Network streaming protocols, e.g. real-time transport protocol [RTP] or real-time control protocol [RTCP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供了一种报文处理方法、设备、存储介质和装置,所述方法包括:将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区;识别目标报文的报文类型;若目标报文的报文类型为流式报文,则将从读写缓冲区中读取的目标报文发送到第二服务端口,以使得应用程序通过第二服务端口获取目标报文,该第二服务端口设置为阻塞模式,以使得能够处理各种类型的报文,提升报文的处理效率,实现对报文的边读取边处理。
Description
技术领域
本发明涉及互联网领域,尤其涉及一种报文处理方法、设备、存储介质和装置。
背景技术
非阻塞读写模式(Non-Blocking IO,简称 NIO),是一种基于通道(Channel)和缓冲区(Buffer)的技术,其核心组件包括:通道(Channel)、缓冲区(Buffer)、选择器(Selector),在处理大量连接或者高并发数据的场景时,NIO技术具有更佳的性能表现。
当前主流服务器通常采用非阻塞读写模式进行数据读写处理,以应对大量连接或者高并发数据的场景。非阻塞读写模式面向缓冲区,缓冲区是服务端运行期间的内存块,服务器在接收到客户端发送的报文后,将报文写入读写缓冲区,然后通过读写缓冲区对不同的报文进行非阻塞处理。对于面向缓冲区的非阻塞读写模式,服务器只能对一个完整的报文进行处理,也就是说,基于非阻塞读写模式,服务器需要通过读写缓冲区一次性读取报文的完整数据之后,才能对该报文进行处理,以发送给应用程序,此时,当报文数据量大小未知时,读写缓冲区就需要足够大,才能一次性把该报文通过读写缓冲区完整接收完,以使得服务器能够对该报文进行处理。而由于读写缓冲区的大小受限于计算机硬件内存的大小,以及服务器中当前应用进程分配到的内存大小,即读写缓冲区大小 <服务器进程分配到内存大小 <服务器物理内存大小,因此,服务器无法处理大小超过分配的缓冲区容量大小的报文。
另外,基于非阻塞读写模式,服务器只能对读写缓冲区中的一个完整的报文进行处理,处理完将整个报文发送给应用程序,无法实现应用程序对数据进行边读取边处理的场景。
发明内容
本发明实施例提供一种报文处理方法、设备、存储介质和装置,以使得能够处理各种类型的报文,提升报文的处理效率,实现对报文的边读取边处理。
第一方面,本发明实施例提供一种报文处理方法,所述方法包括:
将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区;
识别所述目标报文的报文类型;
若所述目标报文的报文类型为流式报文,则将从所述读写缓冲区中读取的所述目标报文发送到第二服务端口,以使得应用程序通过所述第二服务端口获取所述目标报文,所述第二服务端口设置为阻塞模式。
第二方面,本发明实施例提供一种报文处理装置,所述装置包括:
接收模块,用于将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区;
识别模块,用于识别所述目标报文的报文类型;
处理模块,用于若所述目标报文的报文类型为流式报文,则将从所述读写缓冲区中读取的所述目标报文发送到第二服务端口,以使得应用程序通过所述第二服务端口获取所述目标报文,所述第二服务端口设置为阻塞模式。
第三方面,本发明实施例提供一种电子设备,包括:存储器、处理器、通信接口;其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如第一方面所述的报文处理方法。
第四方面,本发明实施例提供了一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器至少可以实现如第一方面所述的报文处理方法。
本发明实施例中,将报文类型划分为数据量大小未知的流式报文以及数据量大小已知的非流式报文(可以称为块报文)。服务器将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区,识别目标报文的报文类型,根据目标报文的报文类型,控制目标报文的处理方式。具体地,若目标报文的报文类型为流式报文,而流式报文一般应用于实时数据传输或音视频文件传输的场景,如音频、视频流的传输,其报文的数据量大小未知,针对该种类型报文,则将目标报文从读写缓冲区中发送到第二服务端口,应用程序通过第二服务端口以阻塞的模式读取该流式报文,在阻塞模式下,应用程序在第二服务端口能够实时读取目标报文,实现应用程序对流式报文的边读取边处理,提升报文的处理效率;同时,由于将目标报文从读写缓冲区中发送到第二服务端口处理,就不再需要在第一服务端口通过读写缓冲区一次性接收完整的目标报文,使得对数据量大小未知的流式报文的处理,不再受限于非阻塞读写模式下读写缓冲区容量的限制,既支持对数据量大小已知的块式报文处理,又支持对数据量大小未知的流式报文处理,实现了不同类型报文的处理,提升对业务场景的多样化支持能力。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种报文处理方法的流程图;
图2为本发明实施例提供的一种报文处理方法的流程图;
图3为本发明实施例提供的一种报文处理方法的流程图;
图4为本发明实施例提供的一种报文处理流程的示意图;
图5为本发明实施例提供的一种报文处理流程的示意图;
图6为本发明实施例提供的一种报文处理装置的结构示意图;
图7为本实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
需要说明的是,本发明实施例中所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
首先对本发明实施例中涉及到的一些概念进行解释说明。
阻塞读写模式:阻塞读写模式是面向流的处理,系统一次一个字节地处理数据,数据接收到后被直接处理,没有任何缓存,当阻塞被调用的时候,调用者一直等待请求结果返回,表现为当前线程挂起,无法执行其他任务,当结果返回后调用才继续,因此,阻塞模式下,一个线程只能处理一个通道或连接,应用于低负载、低并发、长请求的场景,来提升开发速率和更好的维护性。非阻塞读写模式:非阻塞读写模式是面向缓冲区的处理,一个面向块(缓冲区)的输入输出系统,以块的形式处理数据,当通道或连接的数据到了之后,才会为其服务,一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情,线程通常将非阻塞读写的空闲时间用于在其他通道上执行读写操作,因此,一个线程便可以管理多个通道或连接,应用于高负载、高并发、短请求的场景。
一般地,在流式传输中,数据是按照一定的流量和速度连续传输的,发送端不需要将数据分割成固定大小的包,而是不断地发送数据流,接收端也可以不断地接收数据流。由于数据是以流的形式传输的,数据流是连续的,没有固定的分割点,因此无法提前确定报文的准确长度,而流式报文一般应用于实时应用或流媒体服务的场景,如音频、视频流的传输,流式报文的数据量大小未知,且通常会超出读写缓冲区容量限制,因此,当服务器接收到流式报文时,由于报文的数据量大小未知,在基于缓冲区的非阻塞读写模式下,服务器只能处理读写缓冲区中完整的报文,若报文的长度超出了读写缓冲区的容量大小,则该报文则无法被处理,因此,为了能够处理数据量大小未知的流式报文,读写缓冲区就要有足够大的容量来容纳整个完整的流式报文,而由于读写缓冲区的大小受限于计算机硬件内存的大小,以及服务器中当前应用进程分配到的内存大小,即读写缓冲区大小 <服务器进程分配到内存大小 <服务器物理内存大小,因此,服务器无法处理报文大小超过分配的缓冲区大小的数据。另外,服务器目前只能对读写缓冲区中的一个完整的报文进行处理,处理完将整个报文发送给上层应用程序,无法实现应用程序对数据进行边读取边处理的场景,例如,在视频直播时,对接收到的直播视频流无法做到边接收边播放,影响到直播的实时性和流畅度。
基于上述描述,通过下述实施例对本发明进行详细的解释和说明。
图1为本发明实施例提供的一种报文处理方法的流程图,如图1所示,该方法包括如下步骤:
101、将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区。
102、识别目标报文的报文类型。
103、若目标报文的报文类型为流式报文,则将从读写缓冲区中读取的目标报文发送到第二服务端口,以使得应用程序通过第二服务端口获取目标报文,第二服务端口设置为阻塞模式。
上述方法可以应用于服务器,一般地,服务器采用非阻塞读写模式与多个客户端同时进行数据收发,基于上述对非阻塞读写模式的介绍,在高负载、高并发、短请求的场景下,采用非阻塞读写模式能带来更高的读写效率。基于非阻塞读写模式,将通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区,也就是,服务器通过第一服务端口与客户端进行报文传输,第一服务端口采用非阻塞读写模式,读写缓冲区是非阻塞读写模式的重要组件,提供了一种数据缓冲机制,当服务器在第一服务端口接收到客户端发送的目标报文时,将报文存入到读写缓冲区;当服务器发送报文给客户端时,将缓冲区中的数据通过第一服务端口发送给客户端。
第一服务端口为服务器对外提供服务的端口,每个服务端口对应不同的网络协议和应用程序,比如:服务器对客户端提供FTP服务时,第一服务端口为FTP服务端口;服务器对客户端提供直播平台服务时,第一服务端口为直播服务端口;服务器对客户提供电子商务服务时,第一服务端口为电子商务服务端口等。
通过第一服务端口,将接收到的客户端发送的报文存入读写缓冲区,当读写缓冲区触发为读模式时,读取读写缓冲区中的报文,此时,首先识别目标报文的报文类型。在本发明实施例中,将报文类型划分为数据量大小未知的流式报文以及数据量大小已知的非流式报文,下面对两种报文类型进行介绍。
流式报文,是一种数据传输的方式,将数据以连续的流的形式进行传输,适用于实时应用和流媒体服务,如实时视频、音频的传输和播放,网络直播等。在传输时,由于数据是以流的形式传输的,数据流是连续的,没有固定的分割点,因此,报文的数据量大小无法预测,即接收方在接收完流式报文之前无法确定报文的准确长度,报文的数据量大小未知;非流式报文,也叫块报文,是另外一种数据传输形式,它将数据分割为多个块,每个块包含特定的信息,块报文的结构通常包括报文头、数据长度、数据内容、校验和以及结束标识等元素,报文的数据量大小可以预测,因此,块报文数据量大小已知,可通过一次性读取或者分块读取来处理数据。
基于上述非流式报文和流式报文的描述,当采用非阻塞读写模式收到非流式报文并写入缓冲区后,服务器可以从读写缓冲区中读出非流式报文的完整报文,对该完整报文处理之后发送给应用程序;而当采用非阻塞读写模式收到流式报文并写入缓冲区后,在非阻塞模式下,由于报文读取中会被其它任务所打断,无法实现对该流式报文的边读取边处理,需要一次性读取完整的报文服务器才能处理,同时,读写缓冲区本身是一个内存块,一方面从容量上限制了流式报文的完整存入,另一方面,在非阻塞读写模式下,由于流式报文数据量大小未知,服务器无法一次性读出流式报文的完整报文,无法正确处理该流式报文并将报文发送给应用程序,降低了流式报文的处理效率。
基于此,在非阻塞读写模式下,当接收到并存入读写缓冲区中的报文为流式报文时,在发送给应用程序之前,服务器首先识别目标报文的报文类型,根据识别出的目标报文的报文类型,确定对目标报文的处理,若目标报文的报文类型为流式报文,则将从读写缓冲区中读取的目标报文发送到第二服务端口,以使得应用程序通过第二服务端口获取目标报文,第二服务端口设置为阻塞模式。
本发明的一个实施例中,目标报文的报文类型可以由客户端在发送报文时设置。具体地,客户端根据报文定义时的数据类型,在报文中标识报文对应的报文类型。比如,报文定义时的数据类型为流类型时,在报文头中标识报文对应的报文类型为流式报文;报文定义时的数据类型不为流类型时,在报文头中标识报文对应的报文类型为非流式报文,其中,非流式报文也可以称为块报文。
本发明的一个实施例中,也可以是客户端根据报文数据量大小,在报文头中标识报文对应的报文类型。比如,报文数据量大小超出读写缓冲区容量限制时,将该报文采用流式报文进行发送,在报文头中标识报文对应的报文类型为流式报文,或者拆分报文,使得报文的数据量小于读写缓冲区容量大小,并在报文头中标识报文对应的报文类型为非流式报文。
本发明的一个实施例中,第二服务端口为与第一服务端口并列存在的具有相同属性的端口,第二服务端口仅用于服务器内部可见,客户端感知不到第二端口的存在。
本发明的一个实施例中,当确定目标报文的报文类型为流式报文,将从读写缓冲区中读取的目标报文发送到第二服务端口时,服务器通知应用程序从第二服务端口读取目标报文,以及,服务器在确定目标报文接收结束时,通知第二服务端口目标报文结束。服务器可以通过发送目标报文结束指示到第二服务端口,以通知第二服务端口目标报文结束;服务器也可以发送目标报文的数据量给第二服务端口,以通知第二服务端口目标报文结束,其中,目标报文的数据量为服务器记录的发送到第二服务端口的目标报文的累计报文长度;服务器也可以在第二服务端口设置目标报文结束标识,以使得应用程序在第二服务端口读取到该目标报文结束标识时,结束目标报文的读取。
基于上述流式报文的数据量大小未知以及流式传输的特点,当读写缓冲区中的目标报文为流式报文时,将目标报文发送到第二服务端口通过阻塞模式由应用程序获取。从读写缓冲区中将目标报文发送到第二服务端口可以采用管道的方式,也可以将目标报文的数据从读写缓冲区中读出后存入另一块存储区域以供应用程序去获取。读写缓冲区存入目标报文的一部分报文时,就可以读取并发送到第二服务端口,而不需要存入完整的目标报文才发送,即目标报文在读写缓冲区可以实时发送到第二服务端口。
此时,在第二服务端口,采用阻塞模式接收目标报文时,会一直接收或等待接收目标报文,可以确保数据的连续可靠传输,减少数据的丢失和错误;应用程序在第二服务端口采用阻塞模式获取目标报文时,会一直阻塞用于读取或等待读取目标报文而不被其它任务所打断,实现应用程序对目标报文的边处理边读取,同时也避免频繁的查询操作,减少资源的浪费,因此,目标报文在第二服务端口采用阻塞模式处理,可以实现对流式报文的边读取边处理,提高流式报文的传输效率、传输稳定性,确保流式数据传输的实时性和流畅性。
图2为本发明实施例提供的一种报文处理方法的流程图,如图2所示,该方法包括如下步骤:
201、将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区,其中,目标报文包括报文头和报文体。
202、识别目标报文的报文类型。
203、若目标报文的报文类型为流式报文,则将从读写缓冲区中读取的目标报文的报文头通过第一服务端口发送给应用程序,将目标报文的报文体发送到第二服务端口,以使得应用程序通过第二服务端口获取报文体,第二服务端口设置为阻塞模式。
可以理解的是,报文通常包括报文头和报文体,基于流式数据在网络中以流的方式传输的特点,流式报文在格式设计上通常会采用一些简洁高效的方式来组织数据,以便在接收端能够按照一定的规则解析和处理数据,因此,流式报文的报文格式并非是固定的,不同的协议或应用场景可能会有不同的流式报文格式,流式报文的报文头通常为流控制信息或流描述信息,以用来传递有关流式数据的相关信息,对于数据量大小可预测,比如,对于实时视频流,可以使用一些特定的标记来指示帧率、分辨率等信息,对于音频流,可以使用一些标志来表示采样率、声道数等信息;而流式报文的报文体为数据流,数据量大小不可预测,因此,流控制信息或流描述信息的数据量通常为长度已知,即流式报文的报文头为长度已知,流式报文的报文体为长度未知。
数据量长度已知的流式报文的报文头与非流式报文均具有数据量大小已知的特点,因此,可以将流式报文的流控制信息与流式报文的报文体采用不同的处理方式,具体地,若目标报文的报文类型为流式报文,则将从读写缓冲区中读取的目标报文的报文头通过第一服务端口发送给应用程序,将目标报文的报文体发送到第二服务端口,以使得应用程序通过第二服务端口获取报文体,第二服务端口设置为阻塞模式。
本发明的一个实施例中,第二服务端口为第一服务端口的守护端口。响应于第一服务端口的启动,伴随启动第二服务端口。将第一服务端口的守护端口作为第二服务端口,能更好地管理第二服务端口,更方便高效地与第一服务端口配合完成对目标报文的处理。
当目标报文为流式报文时,服务器从读写缓冲区中读取目标报文的报文头,进行处理之后直接通过第一服务端口发送给应用程序,以便应用程序根据该目标报文的报文头对后续的报文体,即流式报文的数据流进行处理。
一般地,服务器对目标报文的报文头的处理方式为:对报文头进行格式转换,转换为应用程序能够识别的数据格式;或者,对报文头以及读写缓冲区中读取的其它已知长度的报文重组封装,以与应用程序约定好的格式发送给应用程序;或者对报文头进行解码之后,将解码后报文头的内容发送给应用程序。
本发明的一个实施例中,通过异步方式,将报文体发送到第二服务端口。异步发送时,发送方不需要等待接收方的响应或结果,可以立即进行下一个操作,也就是发送方和接收方之间解耦,可以独立进行处理和运行,减少相互依赖性和耦合度。异步发送可以充分利用系统资源,避免因等待响应而导致的时间浪费,从而提高整体系统的性能和响应速度。
显然,服务器也可以通过同步方式,将报文体发送到第二服务端口。同步发送时,发送方在发送消息后会一直等待接收方的响应或结果,直到收到才能继续执行后续操作,发送方和接收方之间存在强耦合关系,由于发送方需要等待接收方的响应,可以及时获取到错误信息,方便进行错误处理和故障排查,同步发送保证了发送方在接收到响应后,才会进行后续的操作,可以确保数据的一致性。
可选地,在将目标报文发送到第二服务端口时,记录发送到第二服务端口的目标报文的数据量;通过第一服务端口接收到客户端发送的目标报文结束指示时,将记录的目标报文的数据量发送到第二服务端口,以通知第二服务端口目标报文发送结束。由于目标报文为流式报文,在目标报文接收过程中,服务器无法确定目标报文以及目标报文的报文体的数据量,从读写缓冲区读取目标报文并发送到第二服务端口时,实时记录发送到第二服务端口的目标报文的长度,进而服务器在确定目标报文接收结束时,得到目标报文的报文体的总长度,即发送到第二服务端口的目标报文的数据量。其中,服务器在接收到客户端发送的目标报文结束指示时,确定目标报文接收结束。
当将从读写缓冲区中读取的目标报文的报文头通过第一服务端口发送给应用程序,将目标报文的报文体发送到第二服务端口时,上述记录的发送到第二服务端口的目标报文的数据量即为已接收到并写入读写缓冲区中的目标报文的报文体的长度。
同时,可以理解的是,服务器和客户端之间的数据收发通常基于连接,连接是为了在客户端和服务器之间建立一条可靠的通信路径,在发送报文之前,客户端需要先与服务器建立连接,以确保双方能够相互识别和通信,因此,客户端发送的目标报文结束指示可以是多种方式,比如:服务器可以将接收到客户端发送的连接关闭请求作为目标报文结束指示,也可以将接收到客户端发送的连接关闭并新建连接的请求作为目标报文结束指示,其中,上述连接关闭请求是指用于发送目标报文而建立的连接的连接关闭请求。
由上可知,当服务器识别目标报文的报文类型为流式报文时,从读写缓冲区中读取目标报文,将目标报文的报文头在第一服务端口进行非阻塞处理,发送给应用程序,采用非阻塞模式提升服务器处理的并发度,然后,将目标报文的报文体发送到第二服务端口进行阻塞处理,通过阻塞模式提升对数据量大小未知的数据流的处理效率。总之,在对客户端呈现出非阻塞读写模式下,将通过非阻塞读写模式接收到读写缓冲区中的报文进行拆分,分别进行非阻塞处理或阻塞处理,以适配报文头和报文体的数据特点,整体提升对报文的处理效率。
进一步地,在确定应用程序获取到目标报文的报文头时,控制应用程序监听第二服务端口,以使得应用程序从第二服务端口获取报文体。当目标报文为流式报文时,确定应用程序接收到第一服务端口基于非阻塞模式发送的目标报文的报文头时,获取流式报文的控制信息,根据已经获取到的流式报文的控制信息,服务器控制应用程序监听第二服务端口,并从第二服务端口基于阻塞模式实时获取到目标报文的报文体,即目标报文的数据流,实现应用程序对目标报文的报文体进行边读取边处理。通过该方法,一方面提升了报文(流式报文)的业务处理效率,另一方面解决了流式报文对读写缓冲区容量大小要求的限制,实现非流式报文与流式报文的通道兼容,提高对业务场景的多样化的适应性。
图3为本发明实施例提供的一种报文处理方法的流程图,如图3所示,该方法包括如下步骤:
301、将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区。
302、识别目标报文的报文类型。
303、若目标报文的报文类型为流式报文,则将从读写缓冲区中读取的目标报文发送到第二服务端口,以使得应用程序通过第二服务端口获取目标报文,第二服务端口设置为阻塞模式。
304、若目标报文的报文类型为非流式报文,则将从读写缓冲区中读取的目标报文通过第一服务端口发送给应用程序。
上述实施例中,介绍了服务器对流式报文的处理的方法,下面将通过具体示例对非流式报文的处理进行介绍。
非流式报文也叫块报文,其数据量大小已知,可通过一次性读取或者分块读取来处理数据。在非阻塞读写模式下,服务器通过第一服务端口将接收到客户端发送的目标报文存入到读写缓冲区;服务器对读写缓冲区中的数据进行读取时,识别目标报文的报文类型;若目标报文的报文类型为流式报文,则将从读写缓冲区中读取的目标报文发送到第二服务端口,以使得应用程序通过第二服务端口获取目标报文,第二服务端口设置为阻塞模式;若目标报文的报文类型为非流式报文,则将从读写缓冲区中读取的目标报文通过第一服务端口发送给应用程序。图4为本发明实施例提供的一种报文处理流程的示意图,如图4所示,读写缓冲区中存入了3个报文,报文1和报文2为块报文,报文3为流式报文。当读写缓冲区触发设置为读模式时,读写缓冲区的属性Position指示了读取起始位置,从起始位置开始,读报文1时,服务器识别报文1为块报文,则继续读取报文2,识别报文2为块报文,则继续读第3个报文,识别报文3为流式报文,则服务器将读取的报文1和报文2直接在第一服务端口进行处理,处理完发送给应用程序,显然,报文1和报文2为读写缓冲区中当前读取的已知长度报文;接着服务器将报文3通过异步方式转发到第二服务端口,由应用程序通过第二服务端口基于阻塞模式获取报文3,在读取报文3时,由于无法确定报文3的数据量大小,读写缓冲区可以及时将存入的报文3实时发送到第二服务端口,而不需要等待存入完整的报文3,至此,服务器完成一次对读写缓冲区中数据的读取处理。
本发明的实施例中,服务器采用通道的方式将报文3发送到第二服务端口。可选地,服务器将报文3发送到第二服务端口时,通知应用程序从第二服务端口读取目标报文。
进一步地,服务器对当前读取的已知长度报文(即报文1和报文2)的处理,可以是对已知长度的报文进行格式转换,或者报文重组封装,或者对报文进行解析,使得应用程序收到该已知长度报文后能正确解析并处理该已知长度报文。
在本发明的一个实施例中,在对目标报文为流式报文进行处理时,还可以将从读写缓冲区中读取的目标报文的报文头通过第一服务端口发送给应用程序;将目标报文的报文体发送到第二服务端口,以使得应用程序通过第二服务端口获取报文体。
图5为本发明实施例提供的一种报文处理流程的示意图,如图5所示,读写缓冲区中存入了2个报文,报文1为块报文,报文2为流式报文。当读写缓冲区触发设置为读模式时,读写缓冲区的属性Position指示了读取起始位置,从起始位置开始,读第一个报文时,服务器识别报文1为块报文,则继续读取第2个报文,识别报文2为流式报文,同时识别出报文2的报文头,即已知长度的报文控制信息,则服务器将读取的报文1和报文2的报文头在第一服务端口进行处理,处理完发送给应用程序,显然,报文1和报文2的报文头为读写缓冲区中当前读取的已知长度报文;接着将报文2的报文体即流式报文的数据流,通过异步方式发送到第二服务端口,由应用程序通过第二服务端口基于阻塞模式获取第2个报文的报文体,其中,报文2的报文体发送到第二服务端口,可以边读取边发送,而不需要读取完整的报问题再发送到第二服务端口。
应用程序在第一服务端口收到并解析获取报文1和报文2的报文头,根据报文2的报文头中的报文控制信息,监听第二服务端口,并基于阻塞模式从第二服务端口实时获取到报文2的数据流,并对报文2的数据流边读取边处理。服务器在接收到客户端发送的目标报文结束指示时,确定目标报文接收结束。
可选地,若目标报文的报文类型为流式报文,在将目标报文发送到第二服务端口时,记录发送到第二服务端口的目标报文的数据量;通过第一服务端口接收到客户端发送的目标报文结束指示时,将记录的目标报文的数据量发送到第二服务端口,以通知第二服务端口目标报文发送结束。由于目标报文为流式报文,在目标报文接收过程中,服务器无法获取目标报文的数据量长度以及目标报文的报文体的数据量长度,当从读写缓冲区读取目标报文并发送到第二服务端口时,通过实时记录发送到第二服务端口的目标报文的长度,在目标报文发送结束时,得到目标报文的报文体的总长度,即目标报文的数据量。
若目标报文的报文类型为流式报文,当将从读写缓冲区中读取的目标报文发送到第二服务端口时,上述记录的发送到第二服务端口的目标报文的数据量即为已接收到并写入读写缓冲区中的目标报文的长度。
可选地,客户端发送的目标报文结束指示可以是多种方式,比如:服务器可以将接收到客户端发送的用于发送目标报文的连接对应的连接关闭请求作为目标报文结束指示,也可以将接收到客户端发送的用于发送目标报文的连接对应的连接关闭并新建连接的请求作为目标报文结束指示。
通过上述实施例可知,基于非阻塞读写模式下,将报文类型划分为数据量大小未知的流式报文以及数据量大小已知的非流式报文(可以称为块报文),根据报文类型对读写缓冲区中的报文分类处理,即对非流式报文以及流式报文的报文头在第一服务端口进行非阻塞处理,处理后发送给应用程序,通过非阻塞模式,提升服务器的并发处理能力;同时,将流式报文或者流式报文的数据流发送到第二服务端口进行阻塞处理,通过阻塞模式,确保数据流的连续可靠传输,减少数据流的丢失和错误,同时,阻塞模式下,在写入或读取时不被其它任务所打断,实现应用程序在第二服务端口对流式报文的边读边写。这种基于非阻塞读写模式下,通过对读写缓冲区中报文的报文类型进一步分类处理,一方面提升了流式报文的业务处理效率和传输稳定性,确保流式数据传输的实时性和流畅性,另一方面解决了流式报文对读写缓冲区容量大小要求的限制,实现非流式报文与流式报文的通道兼容,既支持了数量大小为已知长度的业务处理,又支持数据量大小为未知长度的业务处理,提升系统的处理能力,提高用户使用体验。
图6为本发明实施例提供的一种报文处理装置的结构示意图,如图6所示,该装置包括:接收模块11、识别模块12、处理模块13。
接收模块11,用于将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区。
识别模块12,用于识别所述目标报文的报文类型。
处理模块13,用于若所述目标报文的报文类型为流式报文,则将从所述读写缓冲区中读取的所述目标报文发送到第二服务端口,以使得应用程序通过所述第二服务端口获取所述目标报文,所述第二服务端口设置为阻塞模式。
可选地,所述处理模块13用于:响应于所述第一服务端口的启动,伴随启动所述第二服务端口,其中,所述第二服务端口为所述第一服务端口的守护端口。
可选地,所述目标报文包括报文头和报文体。基于此,所述处理模块13具体用于:将从所述读写缓冲区中读取的所述目标报文的报文头通过第一服务端口发送给所述应用程序;将所述目标报文的报文体发送到所述第二服务端口,以使得应用程序通过所述第二服务端口获取所述报文体。
可选地,所述处理模块13用于:通过异步方式,将所述报文体发送到所述第二服务端口。
可选地,所述处理模块13具体用于:在确定所述应用程序获取到所述目标报文的报文头时,控制所述应用程序监听所述第二服务端口,以使得所述应用程序从所述第二服务端口获取所述报文体。
可选地,所述处理模块13还具体用于:若所述目标报文的报文类型为非流式报文,则将从所述读写缓冲区中读取的所述目标报文通过第一服务端口发送给所述应用程序。
可选地,所述处理模块13还具体用于:在将所述目标报文发送到所述第二服务端口时,记录发送到所述第二服务端口的所述目标报文的数据量;通过所述第一服务端口接收到客户端发送的目标报文结束指示时,将记录的所述目标报文的数据量发送到所述第二服务端口,以通知所述第二服务端口所述目标报文发送结束。
图6所示装置可以执行前述实施例中的步骤,详细的执行过程和技术效果参见前述实施例中的描述,在此不再赘述。
在一个可能的设计中,上述图6所示报文处理装置的结构可实现为一电子设备。如图7所示,该电子设备可以包括:处理器21、存储器22、通信接口23。其中,存储器22上存储有可执行代码,当所述可执行代码被处理器21执行时,使处理器21至少可以实现如前述实施例中执行的报文处理方法。
另外,本发明实施例提供了一种非暂时性机器可读存储介质,非暂时性机器可读存储介质上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器至少可以实现如前述实施例中提供的报文处理方法。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助加必需的通用硬件平台的方式来实现,当然也可以通过硬件和软件结合的方式来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以计算机产品的形式体现出来,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (9)
1.一种报文处理方法,其特征在于,所述方法包括:
将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区;
识别所述目标报文的报文类型,所述目标报文包括报文头和报文体;
若所述目标报文的报文类型为流式报文,则将从所述读写缓冲区中读取的所述目标报文的报文头通过第一服务端口发送给应用程序;将所述目标报文的报文体发送到第二服务端口,以使得所述应用程序通过所述第二服务端口获取所述报文体,所述第二服务端口设置为阻塞模式;
其中,在所述非阻塞读写模式下,所述目标报文的读写会被其它报文读写任务所打断;在所述阻塞模式下,会阻塞所述目标报文的读写而不被其它报文读写任务所打断。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述第一服务端口的启动,伴随启动所述第二服务端口,其中,所述第二服务端口为所述第一服务端口的守护端口。
3.根据权利要求1所述的方法,其特征在于,所述将所述目标报文的报文体发送到第二服务端口,包括:
通过异步方式,将所述报文体发送到所述第二服务端口。
4.根据权利要求1所述的方法,其特征在于,所述将所述目标报文的报文体发送到第二服务端口,以使得所述应用程序通过所述第二服务端口获取所述报文体,包括:
在确定所述应用程序获取到所述目标报文的报文头时,控制所述应用程序监听所述第二服务端口,以使得所述应用程序从所述第二服务端口获取所述报文体。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述目标报文的报文类型为非流式报文,则将从所述读写缓冲区中读取的所述目标报文通过第一服务端口发送给所述应用程序。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述将所述目标报文的报文体发送到第二服务端口,以使得所述应用程序通过所述第二服务端口获取所述报文体,包括:
在将所述目标报文的报文体发送到所述第二服务端口时,记录发送到所述第二服务端口的所述目标报文的数据量;
通过所述第一服务端口接收到客户端发送的目标报文结束指示时,将记录的所述目标报文的数据量发送到所述第二服务端口,以通知所述第二服务端口所述目标报文发送结束。
7.一种报文处理装置,其特征在于,包括:
接收模块,用于将基于非阻塞读写模式,通过第一服务端口接收到的客户端发送的目标报文存入到读写缓冲区,其中,在所述非阻塞读写模式下,所述目标报文的读写会被其它报文读写任务所打断;
识别模块,用于识别所述目标报文的报文类型,所述目标报文包括报文头和报文体;
处理模块,用于若所述目标报文的报文类型为流式报文,则将从所述读写缓冲区中读取的所述目标报文的报文头通过第一服务端口发送给应用程序;将所述目标报文的报文体发送到第二服务端口,以使得所述应用程序通过所述第二服务端口获取所述报文体,所述第二服务端口设置为阻塞模式,其中,在所述阻塞模式下,会阻塞所述目标报文的读写而不被其它报文读写任务所打断。
8.一种电子设备,其特征在于,包括:存储器、处理器、通信接口;其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1至6中任一项所述的报文处理方法。
9.一种非暂时性机器可读存储介质,其特征在于,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1至6中任一项所述的报文处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311220488.4A CN116962512B (zh) | 2023-09-20 | 2023-09-20 | 报文处理方法、设备、存储介质和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311220488.4A CN116962512B (zh) | 2023-09-20 | 2023-09-20 | 报文处理方法、设备、存储介质和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116962512A CN116962512A (zh) | 2023-10-27 |
CN116962512B true CN116962512B (zh) | 2024-01-05 |
Family
ID=88460539
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311220488.4A Active CN116962512B (zh) | 2023-09-20 | 2023-09-20 | 报文处理方法、设备、存储介质和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116962512B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101282300A (zh) * | 2008-03-03 | 2008-10-08 | 北京航空航天大学 | 一种基于非阻塞机制的http报文处理方法 |
US7680944B1 (en) * | 2003-02-28 | 2010-03-16 | Comtrol Corporation | Rapid transport service in a network to peripheral device servers |
CN112003767A (zh) * | 2020-08-14 | 2020-11-27 | 上海许继电气有限公司 | 一种模拟报文发送方法 |
CN114338548A (zh) * | 2020-10-12 | 2022-04-12 | 迈普通信技术股份有限公司 | 报文分流方法、装置、网络设备及计算机可读存储介质 |
WO2023151354A2 (zh) * | 2022-12-01 | 2023-08-17 | 黄建邦 | 数据传输方法、系统、第一端、中间网络设备及控制设备 |
CN116668415A (zh) * | 2022-06-01 | 2023-08-29 | 中兴通讯股份有限公司 | 流媒体数据处理方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11392498B2 (en) * | 2019-05-24 | 2022-07-19 | Texas Instruments Incorporated | Aliased mode for cache controller |
-
2023
- 2023-09-20 CN CN202311220488.4A patent/CN116962512B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7680944B1 (en) * | 2003-02-28 | 2010-03-16 | Comtrol Corporation | Rapid transport service in a network to peripheral device servers |
CN101282300A (zh) * | 2008-03-03 | 2008-10-08 | 北京航空航天大学 | 一种基于非阻塞机制的http报文处理方法 |
CN112003767A (zh) * | 2020-08-14 | 2020-11-27 | 上海许继电气有限公司 | 一种模拟报文发送方法 |
CN114338548A (zh) * | 2020-10-12 | 2022-04-12 | 迈普通信技术股份有限公司 | 报文分流方法、装置、网络设备及计算机可读存储介质 |
CN116668415A (zh) * | 2022-06-01 | 2023-08-29 | 中兴通讯股份有限公司 | 流媒体数据处理方法及系统 |
WO2023151354A2 (zh) * | 2022-12-01 | 2023-08-17 | 黄建邦 | 数据传输方法、系统、第一端、中间网络设备及控制设备 |
Also Published As
Publication number | Publication date |
---|---|
CN116962512A (zh) | 2023-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7051110B2 (en) | Data reception/playback method and apparatus and data transmission method and apparatus for providing playback control functions | |
US20090106288A1 (en) | Method and system for supporting media data of various coding formats | |
WO2019062050A1 (zh) | 直播管控方法、装置及电子设备 | |
JP2009512280A (ja) | 補完指示ファイルを用いた、rtpエグレスストリーミング装置及び方法 | |
US11284135B2 (en) | Communication apparatus, communication data generation method, and communication data processing method | |
US20120304235A1 (en) | Method and system for playing video file, and media resource server | |
CN111431868B (zh) | 一种tdm接口传输数据中帧头的定位方法及电子设备 | |
US8499058B2 (en) | File transfer system and file transfer method | |
US11792130B2 (en) | Audio/video communication method, terminal, server, computer device, and storage medium | |
EP1806870B1 (en) | Method for providing data and data transmission system | |
CN110445723B (zh) | 一种网络数据调度方法及边缘节点 | |
US20220014574A1 (en) | Data distribution method and network device | |
CN114025191B (zh) | 一种基于Nginx-rtmp的webrtc低延迟直播方法及系统 | |
CN113573003B (zh) | 一种基于弱网的音视频实时通信方法、装置以及设备 | |
CN116962512B (zh) | 报文处理方法、设备、存储介质和装置 | |
US7720067B2 (en) | Data transfer apparatus and transfer control method | |
CN104469538A (zh) | 面向画面画质较小损失的rtp视频流数据包重组方法 | |
CN115643426B (zh) | 一种面向空间应用领域的通用视频播放方法和系统 | |
US8811478B2 (en) | Data transmission method and apparatus | |
CN114979793A (zh) | 一种直播数据传输方法、装置、系统、设备和介质 | |
US20050068976A1 (en) | Data transmitting apparatus, data transmitting/receiving system, and data transmitting/receiving method | |
CN113409801A (zh) | 用于实时音频流播放的噪音处理方法、系统、介质和装置 | |
CN108200481B (zh) | 一种rtp-ps流处理方法、装置、设备及存储介质 | |
CN112135163A (zh) | 视频起播的方法以及装置 | |
CN101389010B (zh) | 播放器以及播放方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |