一种通信方法和装置
技术领域
本发明涉及通信技术领域,特别涉及一种通信方法和装置。
背景技术
在TCP/IP网络应用中通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Server model)即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。
套接字(SOCKET)是支持TCP/IP的网络通信的基本操作单元,可以看作是不同主机之间的进程进行双向通信的端面点,简单的说就是通信的双方的一种约定,用套接字通过特定的IP地址和端口实现客户端和服务端的通信。
目前在使用手持移动设备的库房等场景中,应用程序都采用将多个功能集成到某一个客户端应用程序上,不同的操作人员通过客户端访问单一服务端程序的不同模块,即访问同一进程的不同应用程序,来实现具体功能。
当服务端为客户端的某个功能提供服务的程序出现异常,或由于某个服务程序增加、功能更新导致程序崩溃时,由于所有服务程序应用在一个进程中,会导致其它服务程序也无法使用,从而致使客户端的各项功能都无法实现。
发明内容
有鉴于此,本申请提供一种通信方法和装置,以解决某个服务程序错误,导致其它服务程序都不能提供服务的问题。
为解决上述技术问题,本申请的技术方案是这样实现的:
一种通信方法,该方法包括:
服务器针对客户端上使用的每个功能运行一个子服务进程;其中,各子服务进程为独立的服务进程;
接收到客户端使用任一功能而发送的服务请求时,通过该功能对应的子服务进程提供服务,并响应所述客户端。
一种通信装置,该装置包括:子进程单元;
所述子进程单元,用于运行一个子服务进程,该子服务进程对应客户端上使用的一个功能,其中,不同的子服务进程分别运行在不同的子进程单元上;在接收到客户端使用任一功能而发送的服务请求时,通过该功能对应的子服务进程提供服务,并响应所述客户端。
由上面的技术方案可知,本申请中通过将为客户端的每个功能提供服务的程序运行在不同进程中,当任一进程中的程序出现问题时,不影响其它进程中的程序提供服务,从而解决了某个服务程序错误,导致其它服务程序都不能提供服务的问题。
附图说明
图1为本申请实施例一中服务器和客户端之间通信方法流程示意图;
图2为本申请实施例一中服务器和客户端的组网示意图;
图3为本申请实施例二中服务器和客户端之间通信方法流程示意图;
图4为本申请实施例二中服务器和客户端的组网示意图;
图5为本申请实施例三中服务器和客户端的组网示意图;
图6为本申请实施例中应用于上述技术方案的装置结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图并举实施例,对本发明的技术方案进行详细说明。
本申请实施例中提供一种通信方法,应用在TCP/IP网络中。客户端向服务器发送服务请求,服务器接收到客户端发送的请求后,为该客户端提供服务。若使用套接字的通信方式,通过特定的IP地址和端口实现客户端和服务端的通信,但本申请具体实现时不限于这种通信方式。
下面结合附图,详细说明本申请实施例中实现客户端和服务端之间通信的过程。
实施例一
参见图1,图1为本申请实施例一中服务器和客户端之间通信方法流程示意图。具体步骤为:
步骤101,服务器针对客户端上使用的每个功能运行一个子服务进程;其中,各子服务进程为独立的服务进程。
本申请实施例中,每个子服务进程为客户端上对应的功能提供服务,不同与现有实现中,客户端上使用的所有功能对应一个服务进程,当客户端上使用的某个功能对应的进程部分不能提供服务时,该服务进程不能为客户端使用的所有功能提供服务。
本申请实施例中的各子服务进程为独立的,一个子服务进程不能提供服务时,其它子服务进程不受影响。
步骤102,该服务器接收到客户端使用任一功能而发送的服务请求时,通过该功能对应的子服务进程提供服务,并响应所述客户端。
本申请实施例中任一子服务进程处理服务请求,提供服务的过程同现有实现。
以套接字通信方式为例,分配通信句柄,通信句柄可以连接服务器,发送服务请求,接收服务响应。
客户端使用各功能时,获取该功能对应的IP地址和端口,即该功能对应的子服务进程的相关信息(IP地址和端口)。在需要服务器提供服务时,使用获取的IP地址和端口向服务器发送服务请求,直接由IP地址和端口对应的子服务进程接收到。
参见图2,图2为本申请实施例一中服务器和客户端的组网示意图。图2中客户端上能够实现3个功能,分别是A功能、B功能和C功能,在具体实现时,也可以使用多个客户端实现多个功能,本实施例中以1个客户端能够实现多个功能为例。
服务器上运行3个子服务进程,子服务进程A、子服务进程B和子服务进程C。子服务进程A为客户端上的A功能提供服务,子服务进程B为客户端上B功能提供服务,子服务进程C为客户端上C功能提供服务。
客户端上配置A功能对应子服务进程A,子服务进程A对应的IP地址为IPA,端口为端口A;B功能对应子服务进程B,子服务进程B对应的IP地址为IP B,端口为端口B;C功能对应子服务进程C,子服务进程C对应的IP地址为IP C,端口为端口C。
当客户端使用A功能时,获取A功能对应的IP A和端口A,并构造服务请求发送给服务器,在服务请求中携带用户的操作信息。
服务端通过客户端的端口A接收到该服务请求时,直接使用子服务进程A处理该服务请求中携带的操作信息,并将处理结果响应给所述客户端。
客户端使用B功能和C功能时,具体过程与使用A功能类似,这里不再一一描述。
实施例二
参见图3,图3为本申请实施例二中服务器和客户端之间通信方法流程示意图。具体步骤为:
步骤301,服务器运行主服务进程,并针对客户端上使用的每个功能运行一个子服务进程。
服务器运行主服务进程,并通过所述主服务进程获取各子服务进程的配置信息(进程标识、允许接入的客户端的最大数量和进程路径),启动各子服务进程。
在具体实现时,针对任一子服务进程,如果配置信息中存在至少一项参数为空,则确定该子服务进程的配置信息为无效,不启动该子服务进程;否则,根据配置信息启动该子服务进程。本实施例中针对子服务进程的配置信息列举了三项参数,在实际应用中,可以根据实际需要配置相关参数。
该服务器通过主服务进程监听各子服务进程;
当未监听到任一子服务进程,或监听到该子服务进程运行异常,则确定连续重启该子服务进程未启动成功的次数是否达到预设次数,如果是,提示该子服务进程不能启动(如报警等);否则,重启该子服务进程。
若任一子服务进程对应的程序需要升级时,可以使用新的程序启动该子服务进程。
步骤302,该服务器通过主服务进程与客户端连接。
步骤303,该服务器通过主服务进程接收到客户端使用任一功能而发送的服务请求时,根据该服务请求携带的子服务进程标识将该服务请求分配给对应子服务进程。
步骤304,该服务器通过该子服务进程提供服务,并响应所述客户端。
在该实施例中,服务器通过主服务进程与客户端相连,这种情况下,客户端上无论使用哪个功能,只需配置主服务进程对应的IP地址和端口,以及各功能对应的子服务进程标识即可。
以套接字通信方式为例,客户端使用各功能时,获取主服务进程对应的IP地址和端口,以及子服务进程标识;使用获取的IP地址、端口和子服务进程标识向服务器发送服务请求。
服务器通过主服务进程接收到客户端发送的服务请求时,根据该服务请求中携带的子服务进程标识将该服务请求分配给对应的子服务进程提供服务。
参见图4,图4为本申请实施例二中服务器和客户端的组网示意图。图4中客户端上能够实现3个功能,分别是A功能、B功能和C功能;服务器上运行3个子服务进程,子服务进程A、子服务进程B和子服务进程C和一个主服务进程。子服务进程A为客户端上的A功能提供服务,子服务进程B为客户端上B功能提供服务,子服务进程C为客户端上C功能提供服务。
主服务进程用于控制子服务进程A、子服务进程B和子服务进程C的启动,并监控各子服务进程的运行情况。
客户端上配置A功能对应子服务进程A,B功能对应子服务进程B,C功能对应子服务进程C,以及主服务进程对应的IP地址和端口。
当客户端使用A功能时,获取A功能的子服务进程标识A,以及主服务进程对应的IP地址和端口,并构造服务请求发送给服务器,在服务请求中携带用户的操作信息。
服务端通过主服务进程接收到该服务请求时,根据该服务请求中携带的子服务进程标识将该服务请求分配给对应的子服务进程A,子服务进程A处理该服务请求中携带的操作信息,并将处理结果响应给所述客户端。
客户端使用B功能和C功能时,具体过程与使用A功能类似,这里不再一一描述。
实施例三
参见图5,图5为本申请实施例三中服务器和客户端的组网示意图。图5中服务器运行3个子服务进程(子服务进程A、子服务进程B和子服务进程C)和主服务进程。
主服务进程只用于启动和监控各子服务进程,并不用于与客户端相连接。
本实施例中客户端的配置,以及与服务器的通信方式同实施例一,主服务进程启动和监控各子服务进程的方式同实施例二,这里不再一一描述。
本申请上述三个实施例中,客户端可以存在一个或多个,来实现多个功能;服务器可以存在一个或多个,实现为客户端侧的各功能提供服务的各子服务进程。
基于同样的发明构思,本申请还提出一种通信装置。参见图6,图6为本申请实施例中应用于上述技术方案的装置结构示意图。该装置包括:子进程单元601;
子进程单元601,用于运行一个子服务进程,该子服务进程对应客户端上使用的一个功能,其中,不同的子服务进程分别运行在不同的子进程单元上;在接收到客户端使用任一功能而发送的服务请求时,通过该功能对应的子服务进程提供服务,并响应所述客户端。
本申请实施例中的子进程单元有多个,客户端侧能够使用的功能有多少个,这里的子进程单元个数就有多少。
较佳地,该装置进一步包括:主进程单元602;
主进程单元602,用于运行主服务进程,通过所述主服务进程获取各子服务进程的配置信息,并启动各子进程单元601运行子服务进程。
较佳地,
主进程单元602,进一步用于通过主服务进程监听各子进程单元601上运行的子服务进程;当未监听到任一子服务进程,或监听到该子服务进程运行异常,则触发子进程单元601重启该子服务进程。
较佳地,
主进程单元602,进一步用于当未监听到任一子服务进程,或监听到该子服务进程运行异常时,确定连续重启该子服务进程未启动成功的次数是否达到预设次数,如果是,提示该子服务进程不能启动;否则,触发子进程单元601重启该子服务进程操作。
较佳地,
主进程单元602,进一步用于通过主服务进程与客户端连接;通过主服务进程接收到客户端使用任一功能而发送的服务请求时,根据该服务请求携带的子服务进程标识将该服务请求分配给对应子服务进程,通过该子服务进程提供服务。
上述实施例的单元可以集成于一体,也可以分离部署;可以合并为一个单元,也可以进一步拆分成多个子单元。
综上所述,本申请通过将为客户端的每个功能提供服务的程序运行在不同进程中,当任一进程中的程序出现问题时,不影响其它进程中的程序提供服务,从而解决了某个服务程序错误,导致其它服务程序都不能提供服务的问题。
使用本申请实施例提供的技术方案,能够降低应用程序本身与多个模块的耦合性,如果某个模块对应的服务端应用程序出现崩溃错误,不会影响其它功能模块的使用。
使不同作业类型的工作人员可以继续使用其它没有出错的功能模块来工作。本方案特别适用于库房等不同工作人员使用不同功能模块,且功能模块频繁更新和新增的应用程序,防止了因个别功能导致整个生产停滞的灾难性问题。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。