CN102469064B - 通信实现方法及通信设备 - Google Patents
通信实现方法及通信设备 Download PDFInfo
- Publication number
- CN102469064B CN102469064B CN201010531260.3A CN201010531260A CN102469064B CN 102469064 B CN102469064 B CN 102469064B CN 201010531260 A CN201010531260 A CN 201010531260A CN 102469064 B CN102469064 B CN 102469064B
- Authority
- CN
- China
- Prior art keywords
- service
- thread
- request
- client
- message queue
- 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
- Telephonic Communication Services (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及一种通信实现方法及通信设备,该方法基于服务端实现,述服务端包括至少一个系统消息队列和至少一个服务线程,该方法包括:服务端接收客户端的链接请求后,为该客户端建立一个接收调度线程;服务端通过接收调度线程接收所述客户端的服务请求,并将所述服务请求缓存在所述系统消息队列中;所述系统消息队列唤醒空闲状态的服务线程,所述服务线程处理所述系统消息队列中的服务请求,并直接向客户端发送服务结果集。本发明通信实现方法及通信设备可提高系统性能。
Description
技术领域
本发明涉及通信领域,特别是涉及了一种通信实现方法及通信设备。
背景技术
在内存数据库与客户端的链接领域,通常都是基于客户端/服务端体系结构的模式。客户端通过TCP(TransmissionControlProtocol,传输控制协议)协议建立与服务端可靠的通信链接。服务端为每一个链接建立与之对应的服务进程,如图1所示,为客户端提供可靠、实时、高效的服务。每当客户端的服务请求送达时,服务端总处在为其提供服务的空闲状态,能够独有的为其服务。
由于客户端并不是在任何时刻都会有信息发往服务端,请求服务,因此服务端为客户端建立的服务进程在多数时间上都处在一个空闲的工作状态。尤其是当客户端的链接数很多的时候,服务端也同时需要为每一个客户端建立对应的服务进程,随着服务进程的增多,造成了整个数据库系统性能的急剧降低,吞吐率的下降。在实际的应用中,主流数据库厂商oracle推出了共享服务端的工作方式,如图2所示。其基本策略是通过调度器将多个客户端的请求(request)放在请求队列中,空闲的服务进程从请求队列中取出request,处理完成后,将处理结果放入响应(response)队列中去,调度进程从response队列获取信息,返回给客户端。
当客户端连接数比较多的时候,调度器(Dispatcher)频繁的调度,造成了调度器复杂度的增加,客户端等待时间过长,系统性能的下降。
发明内容
本发明要解决的技术问题是提供一种通信实现方法及通信设备,提高系统性能。
为解决以上技术问题,本发明提供一种通信实现方法,该方法基于服务端实现,所述服务端包括至少一个系统消息队列和至少一个服务线程,该方法包括:
服务端接收客户端的链接请求后,为该客户端建立一个接收调度线程;
服务端通过接收调度线程接收所述客户端的服务请求,并将所述服务请求缓存在所述系统消息队列中;
所述系统消息队列唤醒空闲状态的服务线程,所述服务线程处理所述系统消息队列中的服务请求,并直接向客户端发送服务结果集。
进一步地,所述服务线程处理所述服务请求时,绑定对应的接收调度线程的私有数据区,通过所述私有数据区对应的套接字(Socket)发送所述服务结果集。
进一步地,所述服务端接收所述链接请求后,与所述客户端建立链接,所述服务线程通过所述链接发送所述服务结果集;所述客户端请求断链时,所述服务端删除为该客户端建立的接收调度线程。
为解决以上技术问题,本发明还提供了一种通信设备,所述通信设备包括:
请求接收模块,用于接收服务请求端的链接请求;
线程管理模块,用于在接收所述链接请求后,为对应服务请求端建立一个接收调度线程;所述接收调度线程用于接收所述服务请求端的服务请求,并将所述服务请求缓存在所述系统消息队列中;
至少一个系统消息队列,用于缓存服务请求,以及在有缓存的服务请求时,唤醒空闲状态的服务线程;
至少一个所述服务线程,用于处理所述系统消息队列中的服务请求,并直接向服务请求端发送服务结果集。
进一步地,所述服务线程处理所述服务请求时还用于绑定对应的接收调度线程的私有数据区,通过所述私有数据区对应的套接字(Socket)发送所述服务结果集。
进一步地,所述通信设备还包括链接建立模块,用于接收所述链接请求后与所述服务请求端建立链接,所述服务线程通过所述链接发送所述服务结果集;所述线程管理模块,还用于在所述服务请求端请求断链时,删除为该服务请求端建立的接收调度线程。
本发明技术方案为每一个链接建立一个接收调度线程,将服务请求缓存到系统消息队列中去,通过系统消息队列唤醒服务线程,服务线程在处理服务请求完成后,直接将结果集回送给客户端,从而将客户端的服务请求分配到的有限的服务线程中去,提高了服务线程的使用率,提高了系统性能。
附图说明
图1是传统架构C/S链接通信服务示意图;
图2基于Oralce共享服务端模式架构示意图;
图3是本发明通信实现方法的示意图;
图4是本发明方法基于的通信架构示意图;
图5是本发明实施例的流程示意图。
具体实施方式
本发明的通信实现方法是一种基于共享服务线程池架构的客户端/服务端通信方法,本方法站在服务端的角度,为每一个链接建立一个接收调度线程,将客户端对服务端的服务请求,缓存到系统消息队列中去,通过系统消息队列唤醒服务线程,服务线程在处理服务请求完成后,直接将结果集回送给客户端,来及时的为多个客户端提供服务,从而将客户端的服务请求分配到的有限的服务线程中去,提高了服务线程的使用率,解决了因客户端链接数过多导致的系统性能下降的问题,达到了负载均衡;降低消息处理复杂度,提高了消息处理效率,在链接数较大的情况下,其吞吐量相对现有技术有明显提高。
本发明通信实现方法基于服务端实现,所述服务端包括至少一个系统消息队列和至少一个服务线程,其中,系统消息队列,用以缓存任一客户端发送的服务请求;每一个服务线程都存在一个完整信息处理结构体为任意一个客户端提供服务请求,有限个数的服务线程形成一个共享的服务线程池,服务线程等待系统消息队列的唤醒。
如图3所示,本发明通信实现方法包括:
步骤301:服务端接收客户端的链接请求后,为该客户端建立一个接收调度线程;
这里需要说明的是,接收调度线程是针对客户端的链接请求建立的。即,客户端发起链接请求,服务端收到请求后为每个客户端建立一个接收调度线程。
客户端/服务端(以下简称C/S)体系中,C和S可以是一对多、多对一、多对多关系,C和S之间以某种网络协议通讯,如TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/因特网互联协议)。
在执行图3流程前,服务端进行系统初始化,包括利用系统函数API,初始化并创建一定数量的消息队列,同时创建有限个数的服务线程,形成共享服务线程池。
步骤302:服务端通过接收调度线程接收所述客户端的服务请求,并将所述服务请求缓存在所述系统消息队列中;
客户端通过链接向服务端请求服务,服务端的接收调度线程将客户端的服务请求放入操作系统消息队列中去,等待处理。
步骤303:所述系统消息队列唤醒空闲状态的服务线程,所述服务线程处理所述系统消息队列中的服务请求,并直接向客户端发送服务结果集。
服务端采取主动式推送消息,利用了系统消息队列来缓存消息并唤醒服务线程。服务线程取出系统消息队列中的服务请求,并绑定对应的接收调度线程的私有数据区,灵活共享的线程私有数据。服务线程处理完服务请求后,直接通过socket将结果集回送给对应的客户端。
服务线程在为一个客户端服务完成后重新回到空闲状态,可以为另一个客户端服务,而非绑定的固定链接,这样服务端利用一定数量的服务线程,就能够处理大量链接情况下的服务。
处理完客户端的服务请求后,服务端并不会删除所述接收调度线程,只有客户端没有服务请求,且发出断链请求后,服务端才会删除该接收调度线程。
所述接收调度线程根据系统调度策略调度系统消息队列,所述系统消息队列根据系统调度策略唤醒空闲的服务线程。
所述服务端接收所述链接请求后,与所述客户端建立链接,所述服务端和客户端通过建立的链接交互链接请求、服务请求及服务结果集,其中所述服务线程通过所述链接发送所述服务结果集。
本方法主要是利用了在服务端的系统消息队列,限制服务线程的数量,建立一个共享的服务线程池来处理客户端的服务请求,以达到数据库保持较高吞吐率的需求。
以下结合附图对本发明具体实施方式进行说明。
该实施例应用场景中,一个客户端链接请求,服务端处理的过程,见图5中客户端服务请求的信号:
步骤501:服务端启动,初始化并创建系统消息队列和服务线程;
系统启动前,服务端配置文件中设定“服务线程的个数”为internal_shared_sessions和“系统消息队列的个数”为msg_num,internal_shared_sessions确定了在使用服务线程池这种模式下,初始化时创建服务线程的个数;msg_num确定了系统消息队列的个数;
服务端启动,读取internal_shared_sessions值,初始化并创建internal_shared_sessions个服务线程。读取msg_num的值,初始化msg_num个系统消息队列,用于缓存接收调度线程的消息,其包含了为客户端服务信息的结构。
步骤502:客户端启动,向服务端发送链接请求;
步骤503:服务端与客户端建立链接,并建立一个与之对应的接收调度线程;
一般这种链接是基于TCP协议的。
接收调度线程一旦创立,该线程的私有数据区也随之建立,接收调度线程的私有数据区具体包括socket链接会话信息、线程ID、队列、线程状态、接收信息的缓存、发送信息的缓存、互斥锁、信号量等等信息。
步骤504:客户端向服务端发送一个服务请求。
步骤505:服务端的接收调度线程收到客户端的服务请求后,分析服务请求,并调用系统消息队列函数,将服务请求放入系统消息队列中去,以等待服务线程的处理;
步骤506:消息队列唤醒服务线程工作,将服务请求发送给服务线程,以备服务线程处理。
步骤507:服务线程绑定该服务请求对应的接收调度线程的线程私有数据区。
服务线程绑定的接收调度线程私有数据区目的是绑定socket链接会话、服务请求等信息,这样服务线程就可以处理服务请求,并且在返回结果集的时候,就知道发送给哪一个会话链接。
步骤508:服务线程取出系统消息队列中的服务请求;
步骤509:服务线程对该服务请求进行处理,在处理完成后,将服务请求的结果集直接通过接收调度线程的私有数据区对应的Socket(套接字)回送给客户端。
服务线程完成了该链接的服务请求回到等待唤醒状态,等待新的服务请求。
步骤510:客户端接收所述服务结果集。
当客户端发出断链请求时,服务端删除为该客户端建立的接收调度线程,否则即使没有服务请求服务端也不会删除该接收调度线程。
相应地,如果有N(N>internal_shared_sessions,N>msg_num)个客户端请求链接,则服务端建立N个接收调度线程分别为对应的客户端服务,各个接收调度线程分别就对应的客户端的服务请求进行处理,系统消息队列的选择及空闲态服务线程的选择,可基于系统的预置调度策略实现。
上文中,可理解的,本发明方法除了适用于内存数据库与客户端的链接领域,也适用于其他客户端/服务端模式的系统,客户端和服务端是相对的概念,其中接收服务请求的一端即为服务端(以下称为通信设备),发送服务请求的一端即为客户端(以下称为服务请求端)。
为了实现以上方法,本发明还提供了一种通信设备,所述通信设备包括:
请求接收模块,用于接收服务请求端的链接请求;
线程管理模块,用于在接收所述链接请求后,为对应服务请求端建立一个接收调度线程;所述接收调度线程接收所述服务请求端的服务请求,并将所述服务请求缓存在所述系统消息队列中;
至少一个系统消息队列,用于缓存服务请求,以及在有缓存的服务请求时,唤醒空闲状态的服务线程;
至少一个所述服务线程,用于处理所述系统消息队列中的服务请求,并直接向服务请求端发送服务结果集。
进一步地,所述服务线程处理所述服务请求时还用于绑定对应的接收调度线程的私有数据区,通过所述私有数据区对应的套接字(Socket)发送所述服务结果集。
所述线程管理模块,还用于在所述服务请求端请求断链时,删除为该服务请求端建立的接收调度线程。
所述服务线程处理所述服务请求后,重新回到空闲状态。
所述接收调度线程根据系统调度策略调度系统消息队列,所述系统消息队列根据系统调度策略唤醒空闲的服务线程。
所述通信设备还包括链接建立模块,用于接收所述链接请求后与所述服务请求端建立链接,所述服务线程通过所述链接发送所述服务结果集。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改,等同替换,改进等,均应包含在本发明的保护范围之内。
本发明通信实现方法和通信设备为每一个链接建立一个接收调度线程,将客户端对服务端的服务请求,缓存到系统消息队列中去,通过系统消息队列唤醒服务线程,服务线程在处理服务请求完成后,直接将结果集回送给客户端,从而将客户端的服务请求分配到的有限的服务线程中去,提高了服务线程的使用率,提高了系统性能下,在链接数较大的情况下,提高了系统吞吐量。
Claims (8)
1.一种通信实现方法,其特征在于,该方法基于服务端实现,所述服务端包括至少一个系统消息队列和至少一个服务线程,该方法包括:
服务端接收客户端的链接请求后,为该客户端建立一个接收调度线程;
服务端通过接收调度线程接收所述客户端的服务请求,并将所述服务请求缓存在所述系统消息队列中;
所述系统消息队列唤醒空闲状态的服务线程,所述服务线程处理所述系统消息队列中的服务请求,并直接向客户端发送服务结果集;
所述服务线程处理所述服务请求后,重新回到空闲状态。
2.如权利要求1所述的方法,其特征在于:所述服务线程处理所述服务请求时,绑定对应的接收调度线程的私有数据区,通过所述私有数据区对应的套接字Socket发送所述服务结果集。
3.如权利要求1所述的方法,其特征在于:所述接收调度线程根据系统调度策略调度系统消息队列,所述系统消息队列根据系统调度策略调度空闲的服务线程。
4.如权利要求1所述的方法,其特征在于:所述服务端接收所述链接请求后,与所述客户端建立链接,所述服务线程通过所述链接发送所述服务结果集;所述客户端请求断链时,所述服务端删除为该客户端建立的接收调度线程。
5.一种通信设备,其特征在于,所述通信设备包括:
请求接收模块,用于接收服务请求端的链接请求;
线程管理模块,用于在接收所述链接请求后,为对应服务请求端建立一个接收调度线程;所述接收调度线程用于接收所述服务请求端的服务请求,并将所述服务请求缓存在系统消息队列中;
至少一个系统消息队列,用于缓存服务请求,以及在有缓存的服务请求时,唤醒空闲状态的服务线程;
至少一个所述服务线程,用于处理所述系统消息队列中的服务请求,并直接向服务请求端发送服务结果集;
所述服务线程处理所述服务请求后,重新回到空闲状态。
6.如权利要求5所述的通信设备,其特征在于:所述服务线程处理所述服务请求时还用于绑定对应的接收调度线程的私有数据区,通过所述私有数据区对应的套接字Socket发送所述服务结果集。
7.如权利要求5所述的通信设备,其特征在于:所述接收调度线程根据系统调度策略调度系统消息队列,所述系统消息队列根据系统调度策略调度空闲的服务线程。
8.如权利要求5所述的通信设备,其特征在于:所述通信设备还包括链接建立模块,用于接收所述链接请求后与所述服务请求端建立链接,所述服务线程通过所述链接发送所述服务结果集;所述线程管理模块,还用于在所述服务请求端请求断链时,删除为该服务请求端建立的接收调度线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010531260.3A CN102469064B (zh) | 2010-11-03 | 2010-11-03 | 通信实现方法及通信设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010531260.3A CN102469064B (zh) | 2010-11-03 | 2010-11-03 | 通信实现方法及通信设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102469064A CN102469064A (zh) | 2012-05-23 |
CN102469064B true CN102469064B (zh) | 2016-05-11 |
Family
ID=46072243
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010531260.3A Active CN102469064B (zh) | 2010-11-03 | 2010-11-03 | 通信实现方法及通信设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102469064B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103281338B (zh) * | 2013-06-21 | 2016-03-09 | 新乡职业技术学院 | 服务器业务处理方法 |
CN103338160B (zh) * | 2013-07-19 | 2016-04-20 | 天津汉柏信息技术有限公司 | 基于缓存队列的轮询业务的优化系统及优化方法 |
CN103399786B (zh) * | 2013-07-31 | 2016-12-28 | 厦门市美亚柏科信息股份有限公司 | 一种基于运行时上下文的出站式服务实现方法及系统 |
CN103685480A (zh) * | 2013-11-29 | 2014-03-26 | 云海创想信息技术(无锡)有限公司 | 一种传输控制协议网络实现方法以及一种服务器 |
CN104980472A (zh) * | 2014-04-10 | 2015-10-14 | 腾讯科技(深圳)有限公司 | 网络访问量的控制方法及装置 |
CN104994093B (zh) * | 2015-07-01 | 2018-11-02 | 网宿科技股份有限公司 | 一种服务负载均衡方法及系统 |
CN107135168A (zh) * | 2016-02-29 | 2017-09-05 | 上海普兰金融服务有限公司 | 一种网络数据处理方法及装置 |
CN105827604A (zh) * | 2016-03-15 | 2016-08-03 | 深圳市游科互动科技有限公司 | 服务器业务处理方法及服务器 |
CN106095599A (zh) * | 2016-06-07 | 2016-11-09 | 深圳证券通信有限公司 | 一种异步长连接易扩展接口方法 |
CN106502662B (zh) * | 2016-10-17 | 2019-06-14 | 北京儒博科技有限公司 | 用于智能操作系统的多区域图形绘制方法及装置 |
CN106897146A (zh) * | 2017-02-09 | 2017-06-27 | 青岛海信移动通信技术股份有限公司 | 一种终端的麦克风的数据处理方法和具有麦克风的终端 |
CN107454177A (zh) * | 2017-08-15 | 2017-12-08 | 合肥丹朋科技有限公司 | 网络通信的动态实现方法 |
CN109542216B (zh) | 2018-10-11 | 2022-11-22 | 平安科技(深圳)有限公司 | 人机交互方法、系统、计算机设备及存储介质 |
CN111181999A (zh) * | 2020-01-09 | 2020-05-19 | 山东超越数控电子股份有限公司 | 稳定高效易用的通信方法 |
CN114979233A (zh) * | 2022-07-19 | 2022-08-30 | 深圳市亿联无限科技有限公司 | 基于域套接字实现模块间同步和异步调用的方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1561043A (zh) * | 2004-02-20 | 2005-01-05 | 中兴通讯股份有限公司 | 一种多用户并发接入装置及其方法 |
CN1811717A (zh) * | 2006-01-10 | 2006-08-02 | 杭州东信灵通电子实业公司 | 通用进程间通信实现方法 |
CN1834956A (zh) * | 2005-03-18 | 2006-09-20 | 联想(北京)有限公司 | 多线程元数据的处理方法 |
CN101256505A (zh) * | 2007-03-02 | 2008-09-03 | 中国科学院声学研究所 | 基于io事件通知机制的单进程内容服务器装置及方法 |
CN101452555A (zh) * | 2008-12-31 | 2009-06-10 | 中国建设银行股份有限公司 | 查询个人信用信息的方法、系统及个人信用查询系统 |
-
2010
- 2010-11-03 CN CN201010531260.3A patent/CN102469064B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1561043A (zh) * | 2004-02-20 | 2005-01-05 | 中兴通讯股份有限公司 | 一种多用户并发接入装置及其方法 |
CN1834956A (zh) * | 2005-03-18 | 2006-09-20 | 联想(北京)有限公司 | 多线程元数据的处理方法 |
CN1811717A (zh) * | 2006-01-10 | 2006-08-02 | 杭州东信灵通电子实业公司 | 通用进程间通信实现方法 |
CN101256505A (zh) * | 2007-03-02 | 2008-09-03 | 中国科学院声学研究所 | 基于io事件通知机制的单进程内容服务器装置及方法 |
CN101452555A (zh) * | 2008-12-31 | 2009-06-10 | 中国建设银行股份有限公司 | 查询个人信用信息的方法、系统及个人信用查询系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102469064A (zh) | 2012-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102469064B (zh) | 通信实现方法及通信设备 | |
CN103927218B (zh) | 事件分发方法及系统 | |
CN102377685B (zh) | 一种订阅消息的发送系统以及订阅消息的发送方法 | |
CN103297395B (zh) | 一种互联网业务的实现方法、系统以及装置 | |
CN105577801B (zh) | 一种业务加速方法及装置 | |
CN108268208A (zh) | 一种基于rdma的分布式内存文件系统 | |
CN104735077B (zh) | 一种使用环形缓存和环形队列实现udp高效并发的方法 | |
CN103856440A (zh) | 一种基于分布式总线的消息处理方法、服务器和系统 | |
EP1744519A8 (en) | Information exchange system, management server, and method for reducing the network load | |
CN103888441A (zh) | 一种应用程序与协议栈之间的信息传输方法及处理装置 | |
CN109547162B (zh) | 基于两套单向边界的数据通信方法 | |
CN108390950A (zh) | 一种消息推送方法、装置及设备 | |
CN113259415B (zh) | 一种网络报文处理方法、装置及网络服务器 | |
CN108769099A (zh) | 一种消息中间件的消息去重的实现方法 | |
EP1746765A3 (en) | Information exchange system and method for reducing network load | |
CN102467411A (zh) | 一种工作流处理及工作流代理方法、装置和系统 | |
CN101383839A (zh) | 基于数据服务器的数据分发系统及其实现方法 | |
CN100450105C (zh) | 一种基于java消息服务的同步消息接口实现方法 | |
CN104717133A (zh) | 一种分布式消息推送系统及方法 | |
CN101917394B (zh) | 在手机设备上进行数据共享的中间件系统及工作方法 | |
CN110535811B (zh) | 远端内存管理方法及系统、服务端、客户端、存储介质 | |
CN102546778A (zh) | 基于代理跨平台的无线网络接入控制器板间通信方法 | |
CN101656737A (zh) | 一种实现多协议接入的方法及接口平台 | |
CN105868032A (zh) | 一种支持多系统接入的报文处理系统及方法 | |
CN104852991A (zh) | 分布式推送服务器系统及应用该系统的数据推送方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |