CN104702627B - 一种基于报文分类的同步并发通信方法及系统 - Google Patents
一种基于报文分类的同步并发通信方法及系统 Download PDFInfo
- Publication number
- CN104702627B CN104702627B CN201510149217.3A CN201510149217A CN104702627B CN 104702627 B CN104702627 B CN 104702627B CN 201510149217 A CN201510149217 A CN 201510149217A CN 104702627 B CN104702627 B CN 104702627B
- Authority
- CN
- China
- Prior art keywords
- pipe
- message
- data
- request
- service end
- 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
Landscapes
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于报文分类的同步并发通信方法及系统。在本发明的方法和系统下,服务器侧专门设置了一个用于并发响应客户端请求的代理服务器。当客户端向服务器请求实时数据时,通过该代理服务器进行并发响应数据请求。服务器、代理服务器、客户端通过命名管道进行通讯。当客户端向服务器请求非实时数据时,客户端直接向服务器请求非实时数据。在某些特定的应用场合中,客户端请求实时数据频繁,而非实时数据请求次数不多。当本发明应用于这种存在大量并发同步请求场合时,可显著提高客户端程序与服务器程序之间的数据交互效率与可靠性。
Description
技术领域
本发明涉及C/S系统中服务器的并发处理技术。
背景技术
随着计算机网络与通信技术的不断发展和应用,新的网络通信技术、编程方法不断涌现,而在底层服务程序中,大多数程序是客户端/服务器(Client/Server)模式,程序之间势必会牵涉到进程间的通讯问题。随着应用的不断广泛、及接入的数据不断增多,程序之间务必会进行很频繁的数据交换。而在进程间通信的方法中,最受欢迎的包括socket通信、命名管道。socket方式一般选择TCP或UDP方式,其中,TCP是面向连接的,必须先与目标程序建立连接才能进行通信,在建立连接过程中要经过三次握手,而关闭连接则需要经过四次握手。TCP信息包还需要在数据前增加20个字节的报文头,额外开销大,且传输较慢,对资源的消耗也较多;而UDP是面向无连接的,虽然报文头只有8个字节,额外开销小,比TCP传输更快,但不能保证报文的顺序接收与数据的可靠性。因此,比较可靠、效率比较高的方式为命名管道方式。
公开号为CN103197968A的专利文献《一种融合同步异步特点的线程池处理方法及系统》公开了:对互联网上大量的任务请求,通过线程池进行异步处理,使之互相不受影响且等待时间短,同时单用户操作实现同步处理,符合按业务顺序输出的要求,而且对重要性高的任务请求,具备优先处理的优选机制。该专利文献所公开的技术可以解决互联网上大量任务请求下的异步处理。但对于同步的处理只能实现单用户的操作。随着通讯服务的不断发展,应用程序不仅要满足点与点之间的实时消息交互,还要实现通讯数据、图片、文件、实时语音与视频的传输等功能,对于这些传输的处理要严格遵守顺序关系。因此,该专利文献所公开的技术无法有效解决用户的同步处理请求。
公开号为CN103338156A的专利文献《一种基于线程池的命名管道服务器并发通信方法》公开了:当输入消息缓冲区不为空时,业务逻辑线程池从中取出一个输入消息,并根据消息内定义的操作类型,进行对应的操作;当操作完成后,线程池将相应的操作结果打包生成一个输出消息,并将其保存到输出消息缓冲区;当服务器端的写线程监测到输出消息缓冲区存在输出消息时,则从该队列中获取输出消息,然后根据消息中的通信标识,将相应的操作结果返回到对应的客户端。该专利文献所公开的技术提高了任务请求的并发性,但其只是处理了异步请求,对于同步要求较高的场合无法实现。且处理任务请求的是业务逻辑线程池,目前环境下,系统需要接入更多的业务、或其它厂家的系统,业务繁多、变化较快,业务逻辑线程需要不停的变化,导致程序不稳定。
总而言之,对于任务请求较多、任务请求时间较短、一次任务请求的数据量较小的情况下,如何高效的把业务数据按顺序返回,并能支持良好的扩展性,是现有技术存在的一个急需解决的大问题。
发明内容
本发明所要解决的问题:客户端程序、服务器程序进行通信时,提供一种基于报文分类的同步并发通信方法及系统,提高程序间的并发能力、实时性、数据传输可靠性。
为解决上述问题,本发明采用的方案如下:
根据本发明的一种基于报文分类的同步并发通信方法,其特征在于,包括以下步骤:
S11:服务端创建S4L_Pipe和多个S2A_Pipe,并将S4L_Pipe和S2A_Pipe分配至各自独立的线程中;其中,S4L_Pipe为命名管道,用于监听客户端通讯连接;S2A_Pipe为命名管道,用于与代理端通讯;
S12:代理端创建A2C_TaskPool、A4L_Pipe和多个A2S_Pipe,并将A4L_Pipe和A2S_Pipe分配至各自独立的线程中;其中,A2C_TaskPool为用于与客户端通讯的线程池;A4L_Pipe为命名管道,用于监听与客户端通讯连接;A2S_Pipe为与S2A_Pipe一一对应并建立连接的命名管道,用于与服务端通讯;A2S_Pipe所分配的线程为A2S_Task;
S21:代理端通过A4L_Pipe接收到客户端命名管道连接请求时,代理端从A2C_TaskPool中提取一空闲线程分配给该客户端作为A2C_Task,A2C_Task建立A2C_Pipe;其中,A2C_Task为用于与客户端通讯的线程;A2C_Pipe为命名管道,用于与客户端通讯;
S22:A2C_Task通过A2C_Pipe接收客户端发出的数据请求报文,并将数据请求报文置于请求报文队列内;
S23:A2S_Task从请求报文队列中提取数据请求报文,并通过A2S_Pipe将数据报文请求发送至服务端;
S31:服务端通过S2A_Pipe接收数据请求报文;
S32:当数据请求报文为实时数据请求报文时,服务端将实时数据请求报文所对应的实时数据组成数据返回报文;当数据请求报文为非实时数据请求报文时,服务端将服务端管道连接信息组成数据返回报文;
S33:服务端通过S2A_Pipe将数据返回报文发送至代理端;
S41:A2S_Task通过A2S_Pipe接收数据返回报文,并将数据返回报文置于返回报文队列内;
S42:A2C_Task从返回报文队列中提取数据返回报文,并通过A2C_Pipe发送至客户端;
S61:服务端通过S4L_Pipe接收到客户端连接请求后,创建S2C_Pipe;其中,S2C_Pipe为命名管道,用于与客户端通讯;
S62:服务端通过S2C_Pipe接收客户端发送的非实时数据请求报文;
S63:服务端将非实时数据请求报文对应的非实时数据请组成数据返回报文,并通过S2C_Pipe将数据返回报文发送至客户端。
进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述步骤S23还包括步骤S231:A2C_Task分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文,并将服务端管道连接信息请求报文置于请求报文队列内。
进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述步骤S23还包括步骤S221:A2S_Task分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文,然后通过A2S_Pipe将服务端管道连接信息请求报文发送至服务端。
进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,S2A_Pipe的数量为5个。
进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述“代理端从A2C_TaskPool中提取一空闲线程分配给该客户端作为A2C_Task”中,当A2C_TaskPool中空闲线程不够时创建新线程加入至A2C_TaskPool中直到A2C_TaskPool中线程个数不超过上限值;所述“代理端创建A2C_TaskPool”时A2C_TaskPool中初始的线程个数为20;所述上限值为100。
进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述数据请求报文包括报文头和数据区;所述报文头包括报文类型和报文长度;所述报文类型至少分实时数据类型和历史数据类型。
进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述服务端管道连接信息包括服务端IP地址、服务端电脑名称、服务端S4L_Pipe名称。
根据本发明的一种基于报文分类的同步并发通信系统,其特征在于,包括服务端装置和代理端装置;
所述服务端装置包括:用于服务端初始化的装置、用于服务端与代理端交互的装置和用于服务端与客户端的装置;
所述用于服务端初始化的装置用于在服务端用于创建S4L_Pipe和多个S2A_Pipe并将S4L_Pipe和S2A_Pipe分配至各自独立的线程中;
所述用于服务端与代理端交互的装置包括:用于通过S2A_Pipe接收数据请求报文的装置、用于分析数据请求报文类型的装置、用于当数据请求报文为实时数据请求时将实时数据请求报文所对应的实时数据组成数据返回报文的装置、用于当数据请求报文为非实时数据请求时将服务端管道连接信息组成数据返回报文的装置、以及用于通过S2A_Pipe将数据返回报文发送至代理端的装置;
所述用于服务端与客户端的装置包括:用于通过S4L_Pipe接收到客户端连接请求后创建S2C_Pipe的装置、用于通过S2C_Pipe接收客户端发送的非实时数据请求报文的装置、以及用于将非实时数据请求报文对应的非实时数据组成数据返回报文并通过S2C_Pipe将数据返回报文发送至客户端的装置;
所述代理端装置包括:用于代理端初始化的装置、连接分配线程的装置、用于代理端与客户端交互的装置和用于代理端与服务端交互的装置;
所述用于代理端初始化的装置用于创建A2C_TaskPool、A4L_Pipe和多个A2S_Pipe并将A4L_Pipe和A2S_Pipe分配至各自独立的线程中的装置;
所述连接分配线程的装置用于通过A4L_Pipe接收到客户端命名管道连接请求时从A2C_TaskPool中提取一空闲线程分配给该客户端作为A2C_Task的装置;
所述用于代理端与客户端交互的装置包括:用于建立A2C_Pipe的装置、用于通过A2C_Pipe接收客户端发出的数据请求报文并将数据请求报文置于请求报文队列内的装置、用于从返回报文队列中提取数据返回报文并通过A2C_Pipe发送至客户端的装置;
所述用于代理端与服务端交互的装置包括:用于从请求报文队列中提取数据请求报文并通过A2S_Pipe将数据报文请求发送至服务端的装置、用于通过A2S_Pipe接收数据返回报文并将数据返回报文置于返回报文队列内的装置;
其中,S4L_Pipe为命名管道,用于服务端监听客户端通讯连接;S2A_Pipe为命名管道,用于服务端与代理端通讯;S2C_Pipe为命名管道,用于服务端与客户端通讯;A2C_TaskPool为用于与客户端通讯的线程池;A4L_Pipe为命名管道,用于代理端监听与客户端通讯连接;A2S_Pipe为与S2A_Pipe一一对应并建立连接的命名管道,用于代理端与服务端通讯; A2C_Pipe为命名管道,用于与客户端通讯。
进一步,根据本发明的基于报文分类的同步并发通信系统,其特征在于,所述代理端还包括用于分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文的装置。
进一步,根据本发明的基于报文分类的同步并发通信系统,其特征在于,所述连接分配线程的装置还包括用于当A2C_TaskPool中空闲线程不够时创建新线程加入至A2C_TaskPool中直到A2C_TaskPool中线程个数不超过上限值的装置。
本发明的技术效果如下:服务端对非实时数据的响应处理耗时远远大于对实时数据响应。在同步操作的方式下,如果非实时数据与实时数据均通过代理端响应,很容易造成代理端的堵塞。本发明将非实时数据和实时数据分别采用不同的响应方式,使得服务端对非实时数据长耗时的响应不会堵塞对实时数据的响应,由此提高了代理端对实时数据响应的效率。另一方面,客户端对非实时数据的请求次数远远少于对实时数据的请求次数。服务端接收客户端对非实时数据的请求不多,直接由服务端响应客户端对非实时数据的请求并不会导致对服务端的堵塞,也提高了对非实时数据响应的效率。从而,服务端和代理端的架构整体提高数据交互的效率。此外,本发明采用了命名管道通讯的方式,提高了数据交互的可靠性。
附图说明
图1是本发明的系统架构示意图。
图2是本发明服务端、代理端和客户端的线程之间交互关系图。
图3是本发明服务端、代理端和客户端的交互时序图。
具体实施方式
下面结合附图对本发明做进一步详细说明。
如图1所示,本发明的系统涉及数据服务器1、代理服务器2、客户端电脑3。数据服务器1即为本发明所指的服务端,代理服务器2即为本发明所指代理端,客户端电脑3即为本发明所指客户端。数据服务器1、代理服务器2、客户端电脑3通过网络互联。数据服务器1用于处理来自数据采集系统得到的实时数据。数据服务器1将数据采集系统采集到的实时数据存入数据库形成非实时数据。除此之外,数据服务器1用于接受客户端电脑3数据请求指令将所请求的数据发送至客户端电脑3。客户端电脑3所请求的数据至少包括实时数据和非实时数据。为提高数据服务器1响应客户端电脑3请求数据的效率,本发明在网络上设置了代理服务器2。代理服务器2用于缓冲客户端电脑3数据请求指令,以避免数据服务器1数据请求指令过多导致数据服务器负载过大产生拥堵。为实现上述技术效果,本发明的系统通过对数据服务器1和代理服务器2的分工配合实现,具体实施如下:
如图3所示,首先服务端和代理端分别进行初始化。服务端初始化即为前述步骤S11,服务端创建S4L_Pipe和多个S2A_Pipe,并将S4L_Pipe和S2A_Pipe分配至各自独立的线程中。这里,S4L_Pipe和S2A_Pipe均为命名管道。其中,S4L_Pipe用于监听客户端通讯连接。客户端向服务端请求非实时数据时,首先需要创建命名管道连接。服务端可以通过S4L_Pipe监听到客户端命名管道连接请求,并在接收到客户端命名管道连接请求时创建与客户端通讯的命名管道。S2A_Pipe用于与代理端通讯。服务端初始化过程中,同时还创建各个命名管道对应的线程。本实施例中,S2A_Pipe有5个,相应的,服务端设置了5个用于与代理端通讯的线程。也就是当代理端与服务端进行通讯时,服务端通过独立的线程对代理端进行响应。当客户端向服务端发起命名管道连接请求时,服务端也通过独立的线程进行响应。当客户端与服务端建立命名管道连接后,服务端同样通过相应的线程与客户端进行交互。代理端初始化即为前述步骤S12,代理端创建A2C_TaskPool、A4L_Pipe和多个A2S_Pipe,并将A4L_Pipe和A2S_Pipe分配至各自独立的线程中。这里,A2C_TaskPool为用于与客户端通讯的线程池,初始化时,分配了20个空闲线程。A4L_Pipe和A2S_Pipe为命名管道。其中,A4L_Pipe用于监听与客户端通讯连接。客户端向代理端请求实时数据或非实时数据时,首先需要创建命名管道连接。代理端可以通过A4L_Pipe监听到客户端命名管道连接请求,并在接收到客户端命名管道连接请求时创建与客户端通讯的命名管道。A2S_Pipe用于与服务端通讯,与S2A_Pipe建立一一对应的连接关系。代理端初始化过程中,同时还创建各个命名管道对应的线程。也就是当代理端与服务端进行通讯时,代理端通过独立的线程与服务端进行交互。当客户端向代理端发起命名管道连接请求时,代理端也通过独立的线程进行响应。本实施例中,服务端S2A_Pipe有5个,相应的,代理端的S2A_Pipe也有5个。
服务端和代理端初始化后,服务端、代理端、客户端之间形成如图2所示的线程交互关系。如图2所示,服务端初始化后,产生了5个与代理端交互的线程,1个监听客户端连接的线程。5个与代理端交互的线程分别为:SA1、SA2、SA3、SA4、SA5。SA1、SA2、SA3、SA4、SA5各自分别包含了一个用于与代理端通讯的S2A_Pipe。监听客户端连接的线程为S4L,包含用于监听客户端通讯连接的S4L_Pipe。线程SC1...SCn是动态的,由线程S4L产生,用于处理客户端非实时数据请求指令。代理端初始化后,产生了5个与服务端交互的线程,1个监听客户端连接的线程以及线程池A2C_TaskPool。5个与服务端交互的线程分别为:AS1、AS2、AS3、AS4、AS5。AS1、AS2、AS3、AS4、AS5各自分别包含了一个用于与服务端通讯的A2S_Pipe。代理端线程AS1、AS2、AS3、AS4、AS5与服务端线程SA1、SA2、SA3、SA4、SA5一一对应,并通过之间的命名管道建立意义对应的连接关系。代理端监听客户端连接的线程为A4L,包含用于监听客户端通讯连接的A4L_Pipe。当代理端监听到客户端的命名管道连接请求后,线程A4L从线程池A2C_TaskPool提取一空闲线程与客户端交互。代理端初始化后,产生了如图3所示的两个角色分别为:A2S_Task和A2C_Task。A2S_Task表示用于与服务端交互的线程,即为前述的线程AS1、AS2、AS3、AS4、AS5。A2C_Task表示用于与客户端交互的线程,即为前述的从线程池A2C_TaskPool提取的与客户端交互的线程。服务端和代理端初始化后,代理端通过角色A2S_Task和A2C_Task分别与服务端和客户端进行交互,角色A2S_Task和A2C_Task之间通过全局数据队列进行交互。具体处理过程如下:
当客户端向代理端发起命名管道连接请求后,代理端执行以下步骤:
步骤S21:从A2C_TaskPool中提取一空闲线程分配给该客户端作为A2C_Task,A2C_Task建立S2C_Pipe。这里,A2C_Task为用于与客户端通讯的线程;A2C_Pipe为命名管道,用于与客户端通讯。
步骤S22:A2C_Task通过A2C_Pipe接收客户端发出的数据请求报文,并将数据请求报文置于请求报文队列内。
步骤S23:A2S_Task从请求报文队列中提取数据请求报文,并通过A2S_Pipe将数据报文请求发送至服务端。
本实施例中的线程池A2C_TaskPool为动态线程池。假如A2C_TaskPool中不存在空闲线程时,创建新线程加入至A2C_TaskPool中直到A2C_TaskPool中线程个数不超过上限值。本实施例中A2C_TaskPool线程数初始为20个,线程数上限值为100。也就是说,线程池A2C_TaskPool可容纳最多100个线程。假如线程池A2C_TaskPool中的数量已经达到上限值,则客户端连接代理端失败。本实施例中,请求报文队列为全局数据队列。步骤S23中A2S_Task按一定时间间隔扫描请求报文队列,假如请求报文队列中存在数据请求报文,则执行步骤S23。本实施例的请求报文队列为先进先出队列。步骤S22中,A2C_Task将数据请求报文存入请求报文队列时,总是将数据请求报文放入请求报文队列的最后,而步骤S23中,A2S_Task从请求报文队列中提取数据请求报文时,总是提取请求报文队列中的第一个数据请求报文。本实施例中,数据请求报文包括报文头和数据区。报文头包括报文类型和报文长度。报文类型至少分实时数据类型和历史数据类型。也就是说,数据请求报文至少可分成实时数据请求报文和历史数据请求报文。实时数据请求报文用于向服务端请求获取实时数据。历史数据请求报文用于向服务端请求获取历史数据。当然,本领域技术人员理解,这里的数据请求报文类型还可以扩充,比如统计数据类型,则数据请求报文还可以分统计数据请求报文。统计数据请求报文用于向服务端请求获取统计数据。历史数据和统计数据属于非实时数据。此外,为便于区分,当A2C_Task将数据请求报文置于请求报文队列内时,还会附上报文唯一标识符。该报文唯一标识符由代理端全局函数产生。
代理端A2S_Task将数据报文请求发送至服务端后,服务端执行以下步骤:
步骤S31:通过S2A_Pipe接收数据请求报文。
步骤S32:当数据请求报文为实时数据请求报文时,服务端将实时数据请求报文所对应的实时数据组成数据返回报文,当数据请求报文为非实时数据请求报文时,服务端将服务端管道连接信息组成数据返回报文。
步骤S33:通过S2A_Pipe将数据返回报文发送至代理端。
上述服务端执行的步骤S31、S32、S33由服务端的与代理端通讯线程SA1、SA2、SA3、SA4、SA5完成。由上述过程可以看出,线程SA1、SA2、SA3、SA4、SA5不会向代理端返回非实时数据。服务端管道连接信息,也就是前述S4L_Pipe的信息,包括服务端IP地址、服务端电脑名称、服务端S4L_Pipe名称。客户端可以通过服务端管道连接信息向S4L_Pipe发起命名管道连接请求。步骤S32中,服务端通过数据请求报文中的报文类型判断当前请求获取的数据是实时数据还是非实时数据。
服务端通过S2A_Pipe将数据返回报文发送至代理端后,代理端执行以下步骤:
步骤S41:A2S_Task通过A2S_Pipe接收数据返回报文,并将数据返回报文置于返回报文队列内。
步骤S42:A2C_Task从返回报文队列中提取数据返回报文,并通过A2C_Pipe将数据返回报文发送至客户端。
当步骤S41中A2S_Task将数据返回报文置于返回报文队列内时,A2S_Task将前述的报文唯一标识符附在该数据返回报文。当步骤S22中,A2C_Task将数据请求报文置于请求报文队列内后,A2C_Task按一定时间间隔扫描报文返回队列,假如存在报文唯一标识符所对应的数据返回报文,则执行步骤S42。当步骤S42中A2C_Task通过A2C_Pipe将数据返回报文发送至客户端无需再附上报文唯一标识符。报文唯一标识符只限于在A2C_Task和A2S_Task之间交互。
上述步骤S21、S22、S23、S31、S32、S33、S41、S42是客户端和服务端通过代理端进行交互的过程。上述客户端和服务端交互过程中,服务端最终由线程SA1、SA2、SA3、SA4、SA5响应,线程SA1、SA2、SA3、SA4、SA5只响应实时数据请求。对于非实时数据请求或者其他比如统计数据请求,线程SA1、SA2、SA3、SA4、SA5只是通过代理端向客户端返回服务端管道连接信息。也就是说本实施例由代理端和服务端组成的系统限定了客户端通过代理端向服务端请求数据时,只能请求获取实时数据。对于其他非实时类型的数据比如历史数据或者统计数据要求客户端直接向服务端请求获取。客户端直接向服务端请求获取非实时数据时,服务端执行以下步骤:
步骤S61:通过S4L_Pipe接收到客户端连接请求后,创建S2C_Pipe;其中,S2C_Pipe为命名管道,用于与客户端通讯。
步骤S62:通过S2C_Pipe接收客户端发送的非实时数据请求报文。
步骤S63:将非实时数据请求报文对应的非实时数据组成数据返回报文,并通过S2C_Pipe将数据返回报文发送至客户端。
本实施例的步骤S61中服务端创建S2C_Pipe时,服务端为该S2C_Pipe创建相应的线程与客户端进行交互。该服务端的与客户端进行交互的线程也就是图2中的线程:SC1...SCn。需要指出的是,本实施例中步骤S62和S63中,服务端只处理历史数据或统计数据等非实时数据。对于实时数据不进行响应。由此,本实施例上述由代理端和服务端组成的系统限定了客户端请求实时数据时只能通过代理端进行。
本实施例上述由代理端和服务端组成的系统下,当向服务端请求实时数据时,客户端连接代理端并向代理端发送实时数据请求报文。当向服务端请求非实时数据时,客户端连接服务端并向服务端发送非实时数据请求报文。假如客户端缺少服务端管道连接信息,无法直接向服务端发起连接请求的,则客户端连接代理端并向代理端发送非实时数据请求报文,此时,代理端返回服务端管道连接信息。由此客户端可以根据收到的服务端管道连接信息,连接服务端并向服务端发送非实时数据请求报文。客户端收到服务端管道连接信息后会将收到的服务端管道连接信息持续化保存。在后续的通讯中,客户端直接根据持续化保存的服务端管道连接信息,连接服务端并向服务端发送非实时数据请求报文获取非实时数据。
需要指出的是,上述实施例仅仅是本发明最佳实施方式之一,凡是采用等同替换或等效变换的方式而形成的技术方案均符合本发明的精神,落在本发明权利要求保护的范围内。比如,当代理端收到数据请求报文时,可以对数据请求报文进行分类,当数据请求报文为非实时数据报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文,然后服务端管道连接信息请求报文发送至服务端。具体实现时,可以通过前述步骤S22中实现,也可以在前述步骤S23中实现。
当通过步骤S22实现时,步骤S22还包括步骤S221:A2C_Task分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文,并将服务端管道连接信息请求报文置于请求报文队列内。此时,步骤S23中A2S_Task从请求报文队列中提取的提取的数据请求报文可能是服务端管道连接信息请求报文。服务端对该服务端管道连接信息请求报文处理时,将服务端管道连接信息请求报文作为非实时数据请求报文进行处理后返回服务端管道连接信息。
当通过步骤S23实现时,步骤S23还包括步骤S231:A2S_Task分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文,然后通过A2S_Pipe将服务端管道连接信息请求报文发送至服务端。此后,服务端对该服务端管道连接信息请求报文处理时,将服务端管道连接信息请求报文作为非实时数据请求报文进行处理后返回服务端管道连接信息。
还有一种常见的替换方案是:假如代理端保存有服务端管道连接信息时,步骤S22中当A2C_Task通过A2C_Pipe接收客户端发出的数据请求报文后可做如下处理:
A2C_Task分析数据请求报文的类型;当数据请求报文为非实时数据请求报文时,A2C_Task将存储在代理端的服务端管道连接信息组成数据返回报文,并通过A2C_Pipe将该由服务端管道连接信息组成的数据返回报文发送至客户端;当数据请求报文为实时数据请求报文时,将该实时数据请求报文存入请求报文队列内。
上述替代的方案均符合本发明的精神,在本发明的权利要求保护的范围内。
Claims (10)
1.一种基于报文分类的同步并发通信方法,其特征在于,包括以下步骤:
S11:服务端创建S4L_Pipe和多个S2A_Pipe,并将S4L_Pipe和S2A_Pipe分配至各自独立的线程中;其中,S4L_Pipe为命名管道,用于监听客户端通讯连接;S2A_Pipe为命名管道,用于与代理端通讯;
S12:代理端创建A2C_TaskPool、A4L_Pipe和多个A2S_Pipe,并将A4L_Pipe 和A2S_Pipe分配至各自独立的线程中;其中,A2C_TaskPool 为用于与客户端通讯的线程池;A4L_Pipe为命名管道,用于监听与客户端通讯连接;A2S_Pipe为与S2A_Pipe一一对应并建立连接的命名管道,用于与服务端通讯;A2S_Pipe 所分配的线程为A2S_Task ;
S21:代理端通过A4L_Pipe接收到客户端命名管道连接请求时,代理端从A2C_TaskPool中提取一空闲线程分配给该客户端作为A2C_Task,A2C_Task建立A2C_Pipe;其中,A2C_Task为用于与客户端通讯的线程;A2C_Pipe为命名管道,用于与客户端通讯;
S22:A2C_Task通过A2C_Pipe接收客户端发出的数据请求报文,并将数据请求报文置于请求报文队列内;
S23:A2S_Task从请求报文队列中提取数据请求报文,并通过A2S_Pipe将数据请求报文发送至服务端;
S31:服务端通过S2A_Pipe接收数据请求报文;
S32:当数据请求报文为实时数据请求报文时,服务端将实时数据请求报文所对应的实
时数据组成数据返回报文;当数据请求报文为非实时数据请求报文时,服务端将服务端管道连接信息组成数据返回报文;
S33:服务端通过S2A_Pipe将数据返回报文发送至代理端;
S41:A2S_Task通过A2S_Pipe接收数据返回报文,并将数据返回报文置于返回报文队列内;
S42:A2C_Task从返回报文队列中提取数据返回报文,并通过A2C_Pipe发送至客户端;
S61:服务端通过S4L_Pipe接收到客户端连接请求后,创建S2C_Pipe;其中,S2C_Pipe为命名管道,用于与客户端通讯;
S62:服务端通过S2C_Pipe接收客户端发送的非实时数据请求报文;
S63:服务端将非实时数据请求报文对应的非实时数据组成数据返回报文,并通过S2C_Pipe 将数据返回报文发送至客户端。
2.如权利要求1所述的基于报文分类的同步并发通信方法,其特征在于,所述步骤S22还包括步骤S221:A2C_Task分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文,并将服务端管道连接信息请求报文置于请求报文队列内。
3.如权利要求1所述的基于报文分类的同步并发通信方法,其特征在于,所述步骤S23还包括步骤S231:A2S_Task分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文,然后通过A2S_Pipe将服务端管道连接信息请求报文发送至服务端。
4.如权利要求1 所述的基于报文分类的同步并发通信方法,其特征在于,所述步骤S22中,当A2C_Task通过A2C_Pipe接收客户端发出的数据请求报文后,执行以下步骤:
A2C_Task分析数据请求报文的类型;当数据请求报文为非实时数据请求报文时,A2C_Task将存储在代理端的服务端管道连接信息组成数据返回报文,并通过A2C_Pipe 将该由服务端管道连接信息组成的数据返回报文发送至客户端;当数据请求报文为实时数据请求报文时,将该实时数据请求报文存入请求报文队列内。
5. 如权利要求1所述的基于报文分类的同步并发通信方法,其特征在于,S2A_Pipe的数量为5个;所述“代理端从A2C_TaskPool中提取一空闲线程分配给该客户端作为A2C_Task”中,当A2C_TaskPool中空闲线程不够时创建新线程加入至A2C_TaskPool 中直到A2C_TaskPool中线程个数不超过上限值;所述“代理端创建A2C_TaskPool”时A2C_TaskPool 中初始的线程个数为20;所述上限值为100。
6.如权利要求1所述的基于报文分类的同步并发通信方法,其特征在于,所述数据请求报文包括报文头和数据区;所述报文头包括报文类型和报文长度;所述报文类型至少分实时数据类型和历史数据类型。
7. 如权利要求1 所述的基于报文分类的同步并发通信方法,其特征在于,所述服务端管道连接信息包括服务端IP 地址、服务端电脑名称、服务端S4L_Pipe 名称。
8.一种基于报文分类的同步并发通信系统,其特征在于,包括服务端装置和代理端装置;
所述服务端装置包括:用于服务端初始化的装置、用于服务端与代理端交互的装置和用于服务端与客户端的装置;
所述用于服务端初始化的装置用于在服务端用于创建S4L_Pipe和多个S2A_Pipe并将S4L_Pipe和S2A_Pipe分配至各自独立的线程中;
所述用于服务端与代理端交互的装置包括:用于通过S2A_Pipe接收数据请求报文的装置、用于分析数据请求报文类型的装置、用于当数据请求报文为实时数据请求时将实时数据请求报文所对应的实时数据组成数据返回报文的装置、用于当数据请求报文为非实时数据请求时将服务端管道连接信息组成数据返回报文的装置、以及用于通过S2A_Pipe将数据返回报文发送至代理端的装置;
所述用于服务端与客户端的装置包括:用于通过S4L_Pipe接收到客户端连接请求后创建S2C_Pipe的装置、用于通过S2C_Pipe接收客户端发送的非实时数据请求报文的装置、以及用于将非实时数据请求报文对应的非实时数据组成数据返回报文并通过S2C_Pipe将数据返回报文发送至客户端的装置;
所述代理端装置包括:用于代理端初始化的装置、连接分配线程的装置、用于代理端与客户端交互的装置和用于代理端与服务端交互的装置;
所述用于代理端初始化的装置用于创建A2C_TaskPool、A4L_Pipe和多个A2S_Pipe并将A4L_Pipe和A2S_Pipe分配至各自独立的线程中的装置;
所述连接分配线程的装置用于通过A4L_Pipe接收到客户端命名管道连接请求时从A2C_TaskPool中提取一空闲线程分配给该客户端作为A2C_Task的装置;
所述用于代理端与客户端交互的装置包括:用于建立A2C_Pipe的装置、用于通过A2C_Pipe接收客户端发出的数据请求报文并将数据请求报文置于请求报文队列内的装置、用于从返回报文队列中提取数据返回报文并通过A2C_Pipe发送至客户端的装置;
所述用于代理端与服务端交互的装置包括:用于从请求报文队列中提取数据请求报文并通过A2S_Pipe将数据请求报文发送至服务端的装置、用于通过A2S_Pipe接收数据返回报文并将数据返回报文置于返回报文队列内的装置;
其中,S4L_Pipe为命名管道,用于服务端监听客户端通讯连接;S2A_Pipe为命名管道,用于服务端与代理端通讯;S2C_Pipe为命名管道,用于服务端与客户端通讯;A2C_TaskPool为用于与客户端通讯的线程池;A4L_Pipe为命名管道,用于代理端监听与客户端通讯连接;A2S_Pipe为与S2A_Pipe 一一对应并建立连接的命名管道,用于代理端与服务端通讯;A2C_Pipe为命名管道,用于与客户端通讯。
9.如权利要求8所述的基于报文分类的同步并发通信系统,其特征在于,所述代理端还包括用于分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文的装置。
10.如权利要求8所述的基于报文分类的同步并发通信系统,其特征在于,所述连接分配线程的装置还包括用于当A2C_TaskPool中空闲线程不够时创建新线程加入至A2C_TaskPool中直到A2C_TaskPool中线程个数不超过上限值的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510149217.3A CN104702627B (zh) | 2015-04-01 | 2015-04-01 | 一种基于报文分类的同步并发通信方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510149217.3A CN104702627B (zh) | 2015-04-01 | 2015-04-01 | 一种基于报文分类的同步并发通信方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104702627A CN104702627A (zh) | 2015-06-10 |
CN104702627B true CN104702627B (zh) | 2017-12-26 |
Family
ID=53349395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510149217.3A Active CN104702627B (zh) | 2015-04-01 | 2015-04-01 | 一种基于报文分类的同步并发通信方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104702627B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106330422A (zh) * | 2015-07-03 | 2017-01-11 | 深圳市中兴微电子技术有限公司 | 一种光传输系统中收发端之间的同步方法与装置 |
CN105141693A (zh) * | 2015-09-10 | 2015-12-09 | 上海斐讯数据通信技术有限公司 | 一种分布式服务器架构及其操作方法 |
CN109491805A (zh) * | 2018-10-18 | 2019-03-19 | 北京瑞卓喜投科技发展有限公司 | 一种基于区块链的积分业务方法和业务系统 |
CN109451035A (zh) * | 2018-12-04 | 2019-03-08 | 宁波耘瑞智能科技有限公司 | 一种分离式集群代理与服务的方法、装置及系统 |
CN112533012B (zh) * | 2020-11-25 | 2023-07-04 | 北京达佳互联信息技术有限公司 | 直播间互动信息的传输方法、装置、设备和存储介质 |
CN114257577A (zh) * | 2021-12-08 | 2022-03-29 | 长城计算机软件与系统有限公司 | 一种面向微服务的服务请求消息响应方法和系统 |
CN115460267B (zh) * | 2022-08-16 | 2023-06-02 | 珠海市奥德维科技有限公司 | 通讯方法和系统、存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0981232A2 (en) * | 1998-08-20 | 2000-02-23 | Hitachi, Ltd. | Mobile communication method |
US6115744A (en) * | 1996-07-30 | 2000-09-05 | Bea Systems, Inc. | Client object API and gateway to enable OLTP via the internet |
CN101374154A (zh) * | 2008-10-22 | 2009-02-25 | 成都市华为赛门铁克科技有限公司 | 一种远程过程调用请求的处理方法和装置 |
CN102355429A (zh) * | 2011-08-12 | 2012-02-15 | 北京思创银联科技股份有限公司 | 基于管道的多进程间消息通信方法 |
CN103176856A (zh) * | 2013-04-02 | 2013-06-26 | 浪潮电子信息产业股份有限公司 | 一种基于管道进程间的定时通信方法 |
CN103197968A (zh) * | 2013-03-18 | 2013-07-10 | 焦点科技股份有限公司 | 一种融合同步异步特点的线程池处理方法及系统 |
CN103338156A (zh) * | 2013-06-17 | 2013-10-02 | 南京国电南自美卓控制系统有限公司 | 一种基于线程池的命名管道服务器并发通信方法 |
CN103685083A (zh) * | 2013-12-31 | 2014-03-26 | 曙光云计算技术有限公司 | 异步管理网络中的通信方法 |
CN104410687A (zh) * | 2014-11-26 | 2015-03-11 | 上海爱数软件有限公司 | 一种基于管道的多组进程间数据传递方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE419574T1 (de) * | 2001-01-10 | 2009-01-15 | Cisco Tech Inc | Computersicherheits- und verwaltungssystem |
-
2015
- 2015-04-01 CN CN201510149217.3A patent/CN104702627B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6115744A (en) * | 1996-07-30 | 2000-09-05 | Bea Systems, Inc. | Client object API and gateway to enable OLTP via the internet |
EP0981232A2 (en) * | 1998-08-20 | 2000-02-23 | Hitachi, Ltd. | Mobile communication method |
CN101374154A (zh) * | 2008-10-22 | 2009-02-25 | 成都市华为赛门铁克科技有限公司 | 一种远程过程调用请求的处理方法和装置 |
CN102355429A (zh) * | 2011-08-12 | 2012-02-15 | 北京思创银联科技股份有限公司 | 基于管道的多进程间消息通信方法 |
CN103197968A (zh) * | 2013-03-18 | 2013-07-10 | 焦点科技股份有限公司 | 一种融合同步异步特点的线程池处理方法及系统 |
CN103176856A (zh) * | 2013-04-02 | 2013-06-26 | 浪潮电子信息产业股份有限公司 | 一种基于管道进程间的定时通信方法 |
CN103338156A (zh) * | 2013-06-17 | 2013-10-02 | 南京国电南自美卓控制系统有限公司 | 一种基于线程池的命名管道服务器并发通信方法 |
CN103685083A (zh) * | 2013-12-31 | 2014-03-26 | 曙光云计算技术有限公司 | 异步管理网络中的通信方法 |
CN104410687A (zh) * | 2014-11-26 | 2015-03-11 | 上海爱数软件有限公司 | 一种基于管道的多组进程间数据传递方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104702627A (zh) | 2015-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104702627B (zh) | 一种基于报文分类的同步并发通信方法及系统 | |
CN110300050A (zh) | 消息推送方法、装置、计算机设备及存储介质 | |
US7216348B1 (en) | Method and apparatus for dynamically balancing call flow workloads in a telecommunications system | |
CN113259415B (zh) | 一种网络报文处理方法、装置及网络服务器 | |
CN102638582B (zh) | 数据通信方法及通信端 | |
CN108494817A (zh) | 数据传输方法、相关装置及系统 | |
CN101977234A (zh) | 基于并行tcp技术的广域网通信加速方法 | |
CN111064771B (zh) | 一种网络请求处理方法及系统 | |
WO2010027609A2 (en) | Load balancing for services | |
CN109753370A (zh) | 一种低时延、高吞吐的远程过程调用方法 | |
CN112104679B (zh) | 处理超文本传输协议请求的方法、装置、设备和介质 | |
CN106131162B (zh) | 一种基于iocp机制实现网络服务代理的方法 | |
US9344384B2 (en) | Inter-packet interval prediction operating algorithm | |
CN102761608A (zh) | Udp会话复用的方法和负载均衡设备 | |
CN110753043B (zh) | 一种通信方法、装置、服务器及介质 | |
CN108696598B (zh) | 一种微服务架构下将无状态服务接收到的消息通过长连接透传的方法和装置 | |
CN114024968A (zh) | 一种基于中间设备的报文发送方法、装置和电子设备 | |
Abdul-Fatah et al. | Performance comparison of architectures for client-server interactions in CORBA | |
CN103746935A (zh) | 一种基于应用层协议的带宽合并中间件系统 | |
WO2002101570A1 (en) | Network system with web accelerator and operating method for the same | |
CN112055083B (zh) | 请求处理方法、装置、电子设备和介质 | |
US20020122388A1 (en) | Dynamically reconfigurable intelligent content-based network | |
CN116820797A (zh) | 一种远程过程调用方法、装置、设备及介质 | |
CN106209464A (zh) | 终端的发现方法、终端及其管理系统 | |
EP2463777A1 (en) | System for improving performance of a real time communication application |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: 210012 3 of Tian Shu Science Park, 170-1 software Avenue, Yuhuatai District, Nanjing, Jiangsu. Patentee after: NANJING TIANSU AUTOMATION CONTROL SYSTEM Co.,Ltd. Address before: The Olympic Avenue in Jianye District of Nanjing city of Jiangsu Province, No. 69 210019 Patentee before: NANJING TIANSU AUTOMATION CONTROL SYSTEM Co.,Ltd. |