通信系统以及客户端与服务端之间的通信方法
技术领域
本发明涉及网络通信技术领域,特别涉及一种通信系统以及客户端与服务端之间的通信方法。
背景技术
WCF(WindowsCommunicationFoundation)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分,由.NETFramework3.0开始引入,与WindowsPresentationFoundation及WindowsWorkflowFoundation并行为新一代Windows操作系统以及WinFX的三个重大应用程序开发类库。在.NETFramework2.0以及前版本中,微软发展了WebService(SOAPwithHTTPcommunication),.NETRemoting(TCP/HTTP/Pipelinecommunication)以及基础的Winsock等通信支持,由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性(例如.NETRemoting可以开发SOAP,HTTP通信),对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在使用中有许多不便。同时,面向服务架构(Service-OrientedArchitecture)也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,即WCF,对于数据通信提供了最基本最有弹性的支持。
基于WCF技术的通信系统一般包括WCF客户端(client)和WCF服务端(server),当用户需要实现某项服务时,通过向WCF客户端发出服务请求,WCF客户端基于所述服务请求创建与WCF服务端进行通信的WCF通道(或称为WCF网络链路),通过所创建的WCF通道实现WCF客户端与WCF服务端之间的通信交互,所述通信交互包括:WCF客户端通过创建的WCF通道将服务请求传递给WCF服务端;WCF服务端根据所述服务请求执行业务逻辑,并将执行结果返回至WCF客户端,即WCF客户端接收WCF服务端对于所述服务请求的响应。现有技术中,在WCF客户端与WCF服务端之间的通信结束之后,WCF客户端就会关闭所创建的WCF通道,若接收到新的服务请求,则再创建新的WCF通道与WCF服务端进行通信。由于WCF客户端创建WCF通道比较消耗时间,因此会导致WCF客户端的性能较低。
相关技术还可参考公开号为CN102209076A的中国专利申请,该专利申请公开了一种服务端与客户端之间的交互方法和交互系统。
发明内容
本发明要解决的问题是现有通信系统中WCF客户端的性能较低。
为解决上述问题,本发明技术方案提供一种客户端与服务端之间的通信方法,包括:
WCF客户端在接收到服务请求后,检测通道缓存池中是否存在可用的WCF通道,是则从所述通道缓存池中调用任意一个可用的WCF通道以与WCF服务端进行通信,否则基于所述服务请求创建WCF通道以与所述WCF服务端进行通信。
可选的,所述的客户端与服务端之间的通信方法还包括:在所述WCF客户端与WCF服务端之间的通信结束后,将创建的WCF通道存于所述通道缓存池中。
可选的,在所述WCF客户端与WCF服务端之间的通信结束后,所述将创建的WCF通道存于所述通道缓存池是在检测出该WCF通道未发生错误之后进行的。
可选的,所述的客户端与服务端之间的通信方法还包括:检测所述通道缓存池中存储的WCF通道是否发生错误,将发生错误的WCF通道从所述通道缓存池中移除。
可选的,所述通道缓存池中存储的WCF通道是否发生错误是通过检测各WCF通道的状态位实现的。
为解决上述问题,本发明技术方案还提供一种通信系统,包括WCF客户端和WCF服务端,所述WCF客户端包括:
通道缓存池,适于存储所述WCF客户端创建的WCF通道;
第一检测单元,适于在接收到服务请求后,检测所述通道缓存池中是否存在可用的WCF通道;
调用单元,适于在检测到所述通道缓存池中存在可用的WCF通道后,调用所述通道缓存池中任意一个可用的WCF通道以实现与所述WCF服务端之间的通信;
通道创建单元,适于在检测到所述通道缓存池中不存在可用的WCF通道后,基于所述服务请求创建WCF通道以实现与所述WCF服务端之间的通信。
可选的,所述的通信系统还包括缓存单元,适于在所述WCF客户端与WCF服务端之间的通信结束后,将创建的WCF通道存于所述通道缓存池中。
可选的,所述的通信系统还包括第三检测单元,适于在所述WCF客户端与WCF服务端之间的通信结束后,检测创建的WCF通道是否发生错误;所述缓存单元将创建的WCF通道存于所述通道缓存池是在所述第三检测单元检测出该WCF通道未发生错误之后进行的。
可选的,所述的通信系统还包括:第二检测单元,适于检测所述通道缓存池中存储的WCF通道是否发生错误;移除单元,适于将发生错误的WCF通道从所述通道缓存池中移除。
可选的,所述第二检测单元通过WCF通道的状态位检测所述通道缓存池中存储的WCF通道是否发生错误。
与现有技术相比,本发明技术方案至少具有以下优点:
通过在WCF客户端设置通道缓存池,当完成WCF客户端与WCF服务端结束通信后,不是关闭所创建的WCF通道,而是将其存于所述通道缓存池中,以便下一次服务请求到来时,可以从所述通道缓存池中获取到可用的WCF通道,由此大大减少了因重复创建WCF通道而消耗的时间,使WCF客户端的性能得到提升。
通过对所述通道缓存池中存储的WCF通道的状态进行实时检测,移除检测出发生错误的WCF通道,可以有效避免调用所述通道缓存池中的WCF通道后产生出错的情况,能够进一步提升WCF客户端的性能。
将创建的WCF通道存于所述通道缓存池之前,通过检测该WCF通道是否发生错误,以免将发生错误的WCF通道存入通道缓存池,能进一步提升WCF客户端的性能。
附图说明
图1是本发明实施方式提供的通信系统的结构示意图;
图2是本发明实施例的通信系统的结构示意图;
图3是本发明实施例的客户端与服务端之间的通信方法的流程示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式的限制。
如背景技术所述,现有的基于WCF技术的通信系统中,WCF客户端对于每个接收到的服务请求都会创建WCF通道与WCF服务端通信,并在通信结束后关闭所创建的WCF通道,由于创建WCF通道需要消耗的时间较多,一定程度上降低了WCF客户端的性能。发明人考虑,在实际情况中,有些创建的WCF通道是完全可以被重复利用的,有可能某个WCF通道被关闭后,不久之后WCF客户端仍然需要重新将其创建以满足通信交互的需要,因此,如果将每次创建的WCF通道缓存于一通道缓存池之中,待下次接收到服务请求时便可以从通道缓存池中调用可用的WCF通道,这样就能够减少因重复创建WCF通道而导致的时间消耗,从而有效提高WCF客户端的性能。
需要说明的是,本领域技术人员知晓,通信系统内的调用一般是由WCF客户端发起,然后调用WCF服务端,由于WCF服务端会接受众多WCF客户端的调用,这个过程一般说来WCF服务端消耗的性能会更大,因此,通常会考虑改善WCF服务端的性能;而WCF客户端在一般情况下,消耗的性能会小很多,本领域技术人员并不容易意识到WCF通道的反复创建可能是WCF客户端在调用WCF服务端过程中产生的最大性能消耗。
图1是本发明实施方式提供的通信系统的结构示意图。如图1所示,本发明实施方式提供的通信系统包括WCF客户端10和WCF服务端20,所述WCF客户端10包括:
通道缓存池100,适于存储所述WCF客户端10创建的WCF通道;
第一检测单元101,与所述通道缓存池100相连,适于在接收到服务请求后,检测所述通道缓存池100中是否存在可用的WCF通道;
调用单元102,与所述第一检测单元101和通道缓存池100相连,适于在检测到所述通道缓存池100中存在可用的WCF通道后,调用所述通道缓存池100中任意一个可用的WCF通道以实现与所述WCF服务端20之间的通信;
通道创建单元103,与所述第一检测单元101和通道缓存池100相连,适于在检测到所述通道缓存池100中不存在可用的WCF通道后,基于所述服务请求创建WCF通道以实现与所述WCF服务端20之间的通信。
本发明实施方式中,通过在WCF客户端10设置通道缓存池100,当WCF客户端10与WCF服务端20结束通信后,WCF客户端10不是关闭所创建的WCF通道,而是将其存于所述通道缓存池100中,以便下一次服务请求到来时,可以从所述通道缓存池100中获取到可用的WCF通道,由于减少了因重复创建WCF通道而导致的时间消耗,因此能够使WCF客户端10的性能得到提升。
本发明实施方式中,所述通道缓存池100中存储的所述可用的WCF通道是指处于空闲状态且并未发生错误的WCF通道。
下面以具体实施例对上述通信系统作详细说明。
图2是本发明实施例的通信系统的结构示意图。如图2所示,本实施例提供的通信系统包括WCF客户端10’和WCF服务端20,所述WCF客户端10’除了包括上述实施方式中提到的通道缓存池100、第一检测单元101、调用单元102、通道创建单元103,还包括:缓存单元104,与所述通道创建单元103和通道缓存池100相连,适于在所述WCF客户端10’与WCF服务端20之间的通信结束后,将创建的WCF通道存于所述通道缓存池100中。
需要说明的是,图1所示通信系统的WCF客户端10所包括的通道创建单元103和通道缓存池100之间的连接关系,在本实施例中具体是通过缓存单元104建立的,即通道缓存池100中所存储的WCF通道是由通道创建单元103创建,并由缓存单元104在WCF客户端10’与WCF服务端20之间的通信结束后存储到通道缓存池100中的。
下面详细说明图2所示通信系统的实施过程。
在实际实施时,本实施例提供的通信系统的WCF客户端10’还可以包括通信单元(图中未示出),适于接收用户提出的服务请求,并在WCF通道被获得后(由通道创建单元103创建获得或由调用单元102从通道缓存池100调用获得),将服务请求通过该WCF通道传递给WCF服务端20,以及接收WCF服务端20对于该服务请求的响应。
当所述通信单元接收到服务请求后,WCF客户端10’中的第一检测单元101会检测通道缓存池100中是否存在可用的WCF通道,如果存在可用的WCF通道,则由调用单元102调用所述通道缓存池100中任意一个可用的WCF通道,WCF客户端10’与WCF服务端20之间便建立起了通信连接,WCF客户端10’中的所述通信单元可以通过该WCF通道把所述服务请求传递给WCF服务端20,由WCF服务端20基于该服务请求执行相应的业务逻辑,并把执行结果作为对该服务请求的响应返回给WCF客户端10’的通信单元。如果通道缓存池100中不存在可用的WCF通道,则由通道创建单元103基于所述服务请求创建一个WCF通道,WCF客户端10’通过创建的WCF通道与WCF服务端20过程如前所述,在此不再赘述。
需要说明的是,所述通道缓存池100中可用的WCF通道的数量可能是一个,也可能是多个,此时只需要从中任选一个可用的WCF通道进行调用即可。在实际实施时,通道缓存池100一般可以使用堆栈的方式存储WCF通道,那么当通道缓存池100中存在一个以上可用的WCF通道时,则选取位于堆栈顶部的可用WCF通道。
当WCF客户端10’的通信单元接收到WCF服务端20对于所述服务请求的响应,该响应表示已获得该服务请求所需的结果,则说明WCF客户端10’与WCF服务端20之间的通信结束,此时,如果用于通信的WCF通道是由通道创建单元103所创建的,则由缓存单元104将该WCF通道存储到通道缓存池100之中。
需要说明的是,当WCF客户端10’刚刚启动时,通道缓存池100中通常并未存储任何WCF通道,那么接收到第一个服务请求时,用于与WCF服务端20进行通信的WCF通道由通道创建单元103创建获得,而随着WCF客户端10’接收的服务请求的不断增加(具体体现为线程数或其他组件的增加),一个个WCF通道被不断创建,通道缓存池100中存储的WCF通道也不断增加,那么其中存储的WCF通道被复用的可能性也随之增大,WCF客户端10’性能提升也越来越明显。当然,也可以在WCF客户端10’启动后便预先创建一定数量的WCF通道,以便在接收到服务请求后可以从通道缓存池100中调用可用的WCF通道。
仍然参阅图2,在本实施例中,所述WCF客户端10’还包括:第二检测单元105,与通道缓存池100相连,适于检测所述通道缓存池100中存储的WCF通道是否发生错误;移除单元106,与所述第二检测单元105和通道缓存池100相连,适于将发生错误的WCF通道从所述通道缓存池100中移除。
在实际实施时,由于各种原因,例如WCF服务端的拒绝、WCF服务端出错或重启、网络中断等等,常常会使通道缓存池100中存储的某个或某些WCF通道发生错误(或称为WCF通道失败),如果不对这些发生错误的WCF通道进行处理,则调用单元102在调用其进行通信交互时便会出错,同样会影响到WCF客户端10’的性能,因此需要实时地对通道缓存池100中存储的所有WCF通道进行检测,一旦第二检测单元105发现某个或某些WCF通道发生错误,便由移除单元106将其从通道缓存池100中移除,这样能够进一步提升WCF客户端10’的性能。
具体实施时,所述第二检测单元105是通过WCF通道的状态位检测所述通道缓存池100中存储的WCF通道是否发生错误的。WCF通道的状态位由底层库设定,此为本领域技术人员所公知,在此不再详细描述。
在其他实施例中,本发明实施方式中所述的WCF客户端还可以包括第三检测单元,适于在所述WCF客户端10’与WCF服务端20之间的通信结束后,所述缓存单元104将通道创建单元103所创建的WCF通道存于所述通道缓存池100之前,检测该WCF通道是否发生错误,是则关闭该WCF通道,否则将其存于通道缓存池100。由于在实际实施时,可能在WCF客户端通过某个WCF通道与WCF服务端完成通信交互之后,该WCF通道便可能发生错误,此时将其存入通道缓存池不仅毫无意义,还会影响WCF客户端的性能消耗,因此有必要在对WCF通道进行缓存之前就判断其是否可用。
此外,本领域技术人员知晓,用于WCF客户端与WCF服务端之间进行通信交互的WCF通道实际上是WCF客户端与WCF服务端双方建立的连接,具体由WCF客户端向WCF服务端发起连接,WCF服务端接受WCF客户端的连接,从而双方建立起连接。WCF客户端与WCF服务端之间建立的连接按照不同标准可以分为多种类型,例如可以分为长连接和短连接,也可以分为NET.TCP连接、HTTP连接等多种类型的连接,其中,NET.TCP连接通常属于长连接,该类型的连接被关闭后相应的端口一般不会马上被释放,因此,若一定时间内频繁地创建并关闭此类型的连接,则会造成WCF客户端的通信端口被耗尽的问题,而HTTP连接一般为短连接,该类型的连接被关闭后马上被释放,不存在上述问题。
本实施例中,所述WCF通道的类型可以为NET.TCP长连接,将NET.TCP长连接缓存于通道缓存池之中,除了能够减少因重复创建WCF通道而导致的时间消耗,还能够有效避免由于一定时间内频繁创建和关闭NET.TCP长连接而导致WCF客户端的通信端口被耗尽。
另外需要说明的是,本实施例中所述的WCF客户端和WCF服务端都是指相对性概念。一般来说,WCF客户端作为服务请求以及调用的发起方,WCF服务端作为服务请求以及调用的接受方(或称为响应方)。在实际情况中,某一台服务器既可以是WCF服务端,也可以作为WCF客户端向其他服务器发起调用。
本领域技术人员可以理解,实现上述实施例中通信系统的全部或部分是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读存储介质中,所述存储介质可以是ROM、RAM、磁碟、光盘等。
对应于上述通信系统,本实施例还提供了一种客户端与服务端之间的通信方法。图3是本发明实施例的客户端与服务端之间的通信方法的流程示意图,如图3所示,所述客户端与服务端之间的通信方法包括:
执行步骤S101,WCF客户端接收到服务请求;
执行步骤S102,检测通道缓存池中是否存在可用的WCF通道;是则执行步骤S103,从所述通道缓存池中调用任意一个可用的WCF通道以与WCF服务端进行通信;否则执行步骤S104,基于所述服务请求创建WCF通道以与WCF服务端进行通信。
本实施例中,所述的客户端与服务端之间的通信方法,还包括:在所述WCF客户端与WCF服务端之间的通信结束后,将创建的WCF通道存于所述通道缓存池中。
其他实施例中,在所述WCF客户端与WCF服务端之间的通信结束后,将所创建的WCF通道存于所述通道缓存池之前,还可以检测待缓存的WCF通道是否发生错误,是则关闭该WCF通道,否则将其存于通道缓存池。
本实施例中,所述的客户端与服务端之间的通信方法,还包括:检测所述通道缓存池中存储的WCF通道是否发生错误,将发生错误的WCF通道从所述通道缓存池中移除。具体实施时,所述通道缓存池中存储的WCF通道是否发生错误是通过检测各WCF通道的状态位实现的。
具体实施时,所述WCF通道可以为NET.TCP长连接。
所述客户端与服务端之间的通信方法的具体实施可以参考本实施例提供的通信系统的实施,在此不再赘述。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。