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

文档序号:8383774阅读:288来源:国知局
一种基于报文分类的同步并发通信方法及系统的制作方法
【技术领域】
[0001]本发明涉及C/S系统中服务器的并发处理技术。
【背景技术】
[0002]随着计算机网络与通信技术的不断发展和应用,新的网络通信技术、编程方法不断涌现,而在底层服务程序中,大多数程序是客户端/服务器(Client/Server)模式,程序之间势必会牵涉到进程间的通讯问题。随着应用的不断广泛、及接入的数据不断增多,程序之间务必会进行很频繁的数据交换。而在进程间通信的方法中,最受欢迎的包括socket通信、命名管道。socket方式一般选择TCP或UDP方式,其中,TCP是面向连接的,必须先与目标程序建立连接才能进行通信,在建立连接过程中要经过三次握手,而关闭连接则需要经过四次握手。TCP信息包还需要在数据前增加20个字节的报文头,额外开销大,且传输较慢,对资源的消耗也较多;而UDP是面向无连接的,虽然报文头只有8个字节,额外开销小,比TCP传输更快,但不能保证报文的顺序接收与数据的可靠性。因此,比较可靠、效率比较高的方式为命名管道方式。
[0003]公开号为CN103197968A的专利文献《一种融合同步异步特点的线程池处理方法及系统》公开了:对互联网上大量的任务请求,通过线程池进行异步处理,使之互相不受影响且等待时间短,同时单用户操作实现同步处理,符合按业务顺序输出的要求,而且对重要性高的任务请求,具备优先处理的优选机制。该专利文献所公开的技术可以解决互联网上大量任务请求下的异步处理。但对于同步的处理只能实现单用户的操作。随着通讯服务的不断发展,应用程序不仅要满足点与点之间的实时消息交互,还要实现通讯数据、图片、文件、实时语音与视频的传输等功能,对于这些传输的处理要严格遵守顺序关系。因此,该专利文献所公开的技术无法有效解决用户的同步处理请求。
[0004]公开号为CN103338156A的专利文献《一种基于线程池的命名管道服务器并发通信方法》公开了:当输入消息缓冲区不为空时,业务逻辑线程池从中取出一个输入消息,并根据消息内定义的操作类型,进行对应的操作;当操作完成后,线程池将相应的操作结果打包生成一个输出消息,并将其保存到输出消息缓冲区;当服务器端的写线程监测到输出消息缓冲区存在输出消息时,则从该队列中获取输出消息,然后根据消息中的通信标识,将相应的操作结果返回到对应的客户端。该专利文献所公开的技术提高了任务请求的并发性,但其只是处理了异步请求,对于同步要求较高的场合无法实现。且处理任务请求的是业务逻辑线程池,目前环境下,系统需要接入更多的业务、或其它厂家的系统,业务繁多、变化较快,业务逻辑线程需要不停的变化,导致程序不稳定。
[0005]总而言之,对于任务请求较多、任务请求时间较短、一次任务请求的数据量较小的情况下,如何高效的把业务数据按顺序返回,并能支持良好的扩展性,是现有技术存在的一个急需解决的大问题。

【发明内容】

[0006]本发明所要解决的问题:客户端程序、服务器程序进行通信时,提供一种基于报文分类的同步并发通信方法及系统,提高程序间的并发能力、实时性、数据传输可靠性。
[0007]为解决上述问题,本发明采用的方案如下:
根据本发明的一种基于报文分类的同步并发通信方法,其特征在于,包括以下步骤:
511:服务端创建S4L_Pipe和多个S2A_Pipe,并将S4L_Pipe和S2A_Pipe分配至各自独立的线程中;其中,S4L_Pipe为命名管道,用于监听客户端通讯连接;S2A_Pipe为命名管道,用于与代理端通讯;
512:代理端创建 A2C_TaskPool、A4L_Pipe 和多个 A2S_Pipe,并将 A4L_Pipe 和 A2S_Pipe分配至各自独立的线程中;其中,A2C_TaskPool为用于与客户端通讯的线程池;A4L_Pipe为命名管道,用于监听与客户端通讯连接;A2S_Pipe为与S2A_Pipe——对应并建立连接的命名管道,用于与服务端通讯;A2S_Pipe所分配的线程为A2S_Task ;
521:代理端通过A4L_Pipe接收到客户端命名管道连接请求时,代理端从A2C_TaskPool中提取一空闲线程分配给该客户端作为A2C_Task,A2C_Task建立A2C_Pipe ;其中,A2C_Task为用于与客户端通讯的线程;A2C_Pipe为命名管道,用于与客户端通讯;
522:A2C_Task通过A2C_Pipe接收客户端发出的数据请求报文,并将数据请求报文置于请求报文队列内;
523:A2S_Task从请求报文队列中提取数据请求报文,并通过A2S_Pipe将数据报文请求发送至服务端;
531:服务端通过S2A_Pipe接收数据请求报文;
532:当数据请求报文为实时数据请求报文时,服务端将实时数据请求报文所对应的实时数据组成数据返回报文;当数据请求报文为非实时数据请求报文时,服务端将服务端管道连接信息组成数据返回报文;
533:服务端通过S2A_Pipe将数据返回报文发送至代理端;
541:A2S_Task通过A2S_Pipe接收数据返回报文,并将数据返回报文置于返回报文队列内;
542:A2C_Task从返回报文队列中提取数据返回报文,并通过A2C_Pipe发送至客户端;
561:服务端通过S4L_Pipe接收到客户端连接请求后,创建S2C_Pipe ;其中,S2C_Pipe为命名管道,用于与客户端通讯;
562:服务端通过S2C_Pipe接收客户端发送的非实时数据请求报文;
563:服务端将非实时数据请求报文对应的非实时数据请组成数据返回报文,并通过S2C_Pipe将数据返回报文发送至客户端。
[0008]进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述步骤S23还包括步骤S231:A2C_Task分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文,并将服务端管道连接信息请求报文置于请求报文队列内。
[0009]进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述步骤S23还包括步骤S221:A2S_Task分析数据请求报文的类型,当数据请求报文为非实时数据请求报文时,将该非实时数据请求报文转成服务端管道连接信息请求报文,然后通过A2S_Pipe将服务端管道连接信息请求报文发送至服务端。
[0010]进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,S2A_Pipe的数量为5个。
[0011]进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述“代理端从A2C_TaskPool中提取一空闲线程分配给该客户端作为A2C_Task”中,当A2C_TaskPool中空闲线程不够时创建新线程加入至A2C_TaskPool中直到A2C_TaskPool中线程个数不超过上限值;所述“代理端创建A2C_TaskPool”时A2C_TaskPool中初始的线程个数为20 ;所述上限值为100。
[0012]进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述数据请求报文包括报文头和数据区;所述报文头包括报文类型和报文长度;所述报文类型至少分实时数据类型和历史数据类型。
[0013]进一步,根据本发明的基于报文分类的同步并发通信方法,其特征在于,所述服务端管道连接信息包括服务端IP地址、服务端电脑名称、服务端S4L_Pipe名称。
[0014]根据本发明的一种基于报文分类的同步并发通信系统,其特征在于,包括服务端装置和代理端装置;
所述服务端装置包括:用于服务端初始化的装置、用于服务端与代理端交互的装置和用于服务端与客户端的装置;
所述用于服务端初始化的装置用于在服务端用于创建S4L_Pipe和多个S2A_Pipe并将S4L_Pipe和S2A_Pipe分配至各自独立的线程中;
所述用于服务端与代理端交互的装置包括:用于通过S2A_Pipe接收数据请求报文的装置、用于分析数据请求报文类型的装置、用于当数据请求报文为实时数据请求时将实时数据请求报文所对应的实时数据组成数据返回报文的装置、用于当数据请求报文为非实时数据请求时将服务端管道连接信息组成数据返回报文的装置、以及用于通过S2A_Pipe将数据返回报文发送至代理端的装置;
所述用于服务端与客户端的装置包括:用于通过S4L_Pipe接收到客户端连接请求后创建S2C_Pipe的装置、用于通过S2C_Pipe接收客户端发送的非实时数据请求报文的装置、以及用于将非实时数据请求报文对应的非实时数据组成数据返回报文并通过S2C_
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1