一种基于报文分类的同步并发通信方法及系统的制作方法_2

文档序号:8383774阅读:来源:国知局
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为命名管道,用于与客户端通讯。
[0015]进一步,根据本发明的基于报文分类的同步并发通信系统,其特征在于,所述代理端还包括用于分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文的装置。
[0016]进一步,根据本发明的基于报文分类的同步并发通信系统,其特征在于,所述连接分配线程的装置还包括用于当A2C_TaskPool中空闲线程不够时创建新线程加入至A2C_TaskPool中直到A2C_TaskPool中线程个数不超过上限值的装置。
[0017]本发明的技术效果如下:服务端对非实时数据的响应处理耗时远远大于对实时数据响应。在同步操作的方式下,如果非实时数据与实时数据均通过代理端响应,很容易造成代理端的堵塞。本发明将非实时数据和实时数据分别采用不同的响应方式,使得服务端对非实时数据长耗时的响应不会堵塞对实时数据的响应,由此提高了代理端对实时数据响应的效率。另一方面,客户端对非实时数据的请求次数远远少于对实时数据的请求次数。月艮务端接收客户端对非实时数据的请求不多,直接由服务端响应客户端对非实时数据的请求并不会导致对服务端的堵塞,也提高了对非实时数据响应的效率。从而,服务端和代理端的架构整体提高数据交互的效率。此外,本发明采用了命名管道通讯的方式,提高了数据交互的可靠性。
【附图说明】
[0018]图1是本发明的系统架构示意图。
[0019]图2是本发明服务端、代理端和客户端的线程之间交互关系图。
[0020]图3是本发明服务端、代理端和客户端的交互时序图。
【具体实施方式】
[0021]下面结合附图对本发明做进一步详细说明。
[0022]如图1所示,本发明的系统涉及数据服务器1、代理服务器2、客户端电脑3。数据服务器I即为本发明所指的服务端,代理服务器2即为本发明所指代理端,客户端电脑3即为本发明所指客户端。数据服务器1、代理服务器2、客户端电脑3通过网络互联。数据服务器I用于处理来自数据采集系统得到的实时数据。数据服务器I将数据采集系统采集到的实时数据存入数据库形成非实时数据。除此之外,数据服务器I用于接受客户端电脑3数据请求指令将所请求的数据发送至客户端电脑3。客户端电脑3所请求的数据至少包括实时数据和非实时数据。为提高数据服务器I响应客户端电脑3请求数据的效率,本发明在网络上设置了代理服务器2。代理服务器2用于缓冲客户端电脑3数据请求指令,以避免数据服务器I数据请求指令过多导致数据服务器负载过大产生拥堵。为实现上述技术效果,本发明的系统通过对数据服务器I和代理服务器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个。
[0023]服务端和代理端初始化后,服务端、代理端、客户端之间形成如图2所示的线程交互关系。如图2所示,服务端初始化后,产生了 5个与代理端交互的线程,I个监听客户端连接的线程。5个与代理端交互的线程分别为:SA1、SA2、SA3、SA4、SA5。SA1、SA2、SA3、SA4、SA5各自分别包含了一个用于与代理端通讯的S2A_Pipe。监听客户端连接的线程为S4L,包含用于监听客户端通讯连接的S4L_Pipe。线程SC1...SCn是动态的,由线程S4L产生,用于处理客户端非实时数据请求指令。代理端初始化后,产生了 5个与服务端交互的线程,I个监听客户端连接的线程以及线程池A2C_TaSkPool。5个与服务端交互的线程分别为:AS 1、AS2、AS3、AS4、AS5。AS 1、AS2、AS3、AS4、AS5各自分别包含了一个用于与服务端通讯的A2S_Pipe。代理端线程 AS 1、AS2、AS3、AS4、AS5 与服务端线程 SAl、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为命名管道,用于与客户端通讯。
[0024]步骤S22:A2C_Task通过A2C_Pipe接收客户端发出的数据请求报文,并将数据请求报文置于请求报文队列内。
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1