CN106209996A - 通信处理方法和装置 - Google Patents
通信处理方法和装置 Download PDFInfo
- Publication number
- CN106209996A CN106209996A CN201610505084.3A CN201610505084A CN106209996A CN 106209996 A CN106209996 A CN 106209996A CN 201610505084 A CN201610505084 A CN 201610505084A CN 106209996 A CN106209996 A CN 106209996A
- Authority
- CN
- China
- Prior art keywords
- thread
- node
- communication
- agent
- instance
- 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.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种通信处理方法和装置。其中,该方法包括:在节点中创建一个或多个通信线程,其中,该通信线程用于与对端节点中的线程进行通信,该通信线程包括以下至少之一:服务端线程、客户端线程;通过该一个或多个通信线程中的至少之一在该节点和该对端节点之间进行线程间通信。本发明解决了现有技术中的通信框架不支持线程之间的通信会使通信的处理不够灵活的技术问题,使通信的处理更加灵活。
Description
技术领域
本发明涉及数据处理领域,具体而言,涉及一种通信处理方法和装置。
背景技术
分布式***的核心是分布式通信,下面对现有的分布式通信框架进行介绍,在介绍分布式通信框架之前,首先对分布式通信协议进行说明。
现在的分布式通信协议大致有四种类型:第一种,基于TCP/IP的通信;第二种,基于对象的通信协议(RPC,CORBA,RMI);第三种,基于Http+xml的通信协议(Web Service);第四种,基于Http的通信协议(RESTful)。
在这些通信协议中,RPC可基于HTTP或TCP协议,基于RPC在现有技术中存在分布式通信框架,例如,ZeroRPC,该框架基于ZeroMQ和MessagePack的分布式通信框架。该通信框架具有如下特点:速度快,响应时间短,并发高,跨语言,是分布式通信中十分优秀的RPC框架。
发明人发现,在现有技术中,各种通信框架最小只支持进程之间的通信。例如,在ZeroRPC框架中,虽然该框架是一个高性能、基于ZeroMQ在TCP上支持跨进程间的通信框架,但不支持的跨线程间通信。如果不支持线程之间的通信会使通信的处理不够灵活。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种通信处理方法和装置,以至少解决现有技术中的通信框架不支持线程之间的通信会使通信的处理不够灵活的技术问题。
根据本发明实施例的一个方面,提供了一种通信处理方法,包括:在节点中创建一个或多个通信线程,其中,所述通信线程用于与对端节点中的线程进行通信,所述通信线程包括以下至少之一:服务端线程、客户端线程;通过所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信。
进一步地,在所述节点中创建所述一个或多个通信线程包括;在所述节点中通过设置的代理实例创建所述一个或多个通信线程;通过所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信:所述代理实例使用所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信。
进一步地,所述代理实例使用所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信:所述代理实例将来自所述一个或多个通信线程中的至少之一的消息发送给所述对端节点;所述代理实例根据线程标识符将来自所述对端节点的消息路由到所述节点中对应的线程。
进一步地,在所述代理实例创建所述一个或多个通信线程之前,所述方法还包括:在所述节点中根据所述节点的信息创建所述代理实例;所述代理实例根据所述对端节点的信息注册所述对端节点。
进一步地,所述节点的信息包括以下至少之一:所述节点的标识信息、所述节点的IP地址、所述节点的端口;和/或,所述对端节点的信息包括以下至少之一:所述对端节点的标识信息、所述对端节点的IP地址、所述对端节点的端口。
进一步地,在通过所述一个或多个通信线程在所述节点和所述对端节点之间进行通信之后,所述方法还包括:所述代理实例关闭已通信结束的通信线程;和/或,在所述一个或多个通信线程中的所有通信线程的通信均已结束之后,所述代理实例注销所述对端节点。
进一步地,在所述代理实例注销所述对端节点之后,所述方法还包括:在所述节点关闭所述代理实例。
根据本发明实施例的另一个方面,还提供了一种通信处理装置,位于节点中,包括:创建模块,用于创建一个或多个通信线程,其中,所述通信线程用于与对端节点中的线程进行通信,所述通信线程包括以下至少之一:服务端线程、客户端线程;通信模块,用于通过所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信。
进一步地,所述创建模块和所述通信模块,位于代理实例中。
进一步地,所述通信模块包括:发送单元,用于将来自所述一个或多个通信线程中的至少之一的消息发送给所述对端节点;和/或,接收单元,用于根据线程标识符将来自所述对端节点的消息路由到所述节点中对应的线程。
进一步地,所述创建模块,用于根据所述节点的信息创建所述代理实例;所述装置还包括:注册模块,位于所述代理实例中,用于根据所述对端节点的信息注册所述对端节点。
进一步地,所述节点的信息包括以下至少之一:所述节点的标识信息、所述节点的IP地址、所述节点的端口;和/或,所述对端节点的信息包括以下至少之一:所述对端节点的标识信息、所述对端节点的IP地址、所述对端节点的端口。
进一步地,所述装置还包括:线程关闭模块,位于所述代理实例中,用于关闭已通信结束的线程;和/或,注销模块,位于所述代理实例中个,用于在所述一个或多个通信线程中的所有通信线程的通信均已结束之后,注销所述对端节点。
进一步地,所述装置还包括:代理实例关闭模块,用于在所述注销模块注销所述对端节点之后,关闭所述代理实例。
在本发明实施例中,采用在节点中创建一个或多个通信线程,其中,所述通信线程用于与对端节点中的线程进行通信,所述通信线程包括以下至少之一:服务端线程、客户端线程;通过所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信。通过本发明实施例解决了现有技术中的通信框架不支持线程之间的通信会使通信的处理不够灵活的技术问题,使通信的处理更加灵活。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的通信处理方法的流程图;
图2是根据本发明实施例的通信处理装置的结构框图;
图3是根据本发明实施例的通信处理装置的结构框图;
图4是根据本发明实施例的服务器端接收客户请求处理流程图;
图5是根据本发明实施例的客户端请求处理流程图;
图6是根据本发明可选实施例的整体架构示意图;
图7是根据本发明实施例的各模块通信数据流示意图;以及,
图8是根据本发明实施例的通信框架所采用的ZeroMQ传输模式示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种通信处理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种通信处理方法,图1是根据本发明实施例的通信处理方法的流程图,如图1所示,该流程包括如下步骤:
步骤S102,在节点中创建一个或多个通信线程,其中,通信线程用于与对端节点中的线程进行通信。在使用客户端和服务端通信模式的情况下,创建的通信线程可以包括以下至少之一:服务端线程、客户端线程。通过所述步骤,可以在一个节点中根据需要来创建多个通信进程,这样可以做到一个节点既充当服务端又充当客户端,从而可以使通信的处理更加灵活。这里的节点可以理解为一个物理实体的节点,也可以理解为是一个逻辑上的节点,任何可以生成多线程的逻辑或者物理实体都可以称为节点。
步骤S104,通过创建的一个或多个通信线程中的至少之一在节点和对端节点之间进行线程间通信。
对端节点也可以采用上述步骤S102中的线程通信的处理方式,这样本节点和对端节点就可以进行线程间的通信了。当然,对端节点也可以使用其他的方式来实现与本节点的线程通信,在本实施例中并不限定对端节点所使用的线程的通信方式。
通过上述步骤可以在节点中创建进行通信的线程,从而实现了线程间的通信。上述方法可以应用到各种通信框架中,从而使各种通信框架能够支持线程间的通信。当然,上述的步骤也可以应用到其他的通信处理中,应用到通信框架中是一种比较优的处理方式。
由于一个节点中可以创建多个通信线程,为了更好的管理这些通信线程,可以设置一个代理实例(Agent实例),通过该代理实例来对通信线程进行管理。当然,也可以不使用该代理实例,只要创建了线程通信就可以解决现有技术中不能在线程间进行通信的问题。
下面结合一个可选的实施例对使用Agent实例的线程间的通信进行说明。
上文中的一个或多个通信线程可以是由代理实例触发生成的。然后该代理实例使这些通信线程中的至少之一在节点和对端节点之间进行线程间通信。通过代理实例可以使通信线程的通信和生成得到一个较好的管理,在架构上更加利于使用。
在另一个可选的实施方式中,代理实例不仅仅可以生成线程,以及对线程的管理,还可以对线程之间的接收消息和/或发送消息进行处理。如果使用了代理实例,那么可以由代理实例将来自这些通信线程中的至少之一的消息发送给对端节点,在接收消息的时候,也可以由代理实例根据线程标识符将来自对端节点的消息路由到本节点中对应的线程。通过各个代理实例来控制消息的发送,也使得消息的收发变的更加容易控制,并且,由于是通过代理实例来进行的,在上层屏蔽了通信进程之间的处理,从而也更加有利于进行开发。
在另一可选的实施方式中,代理实例还可以拥有更多的功能,例如,代理实例可以根据对端节点的信息在本节点中注册对端节点,此时代理实例的创建也是可以根据节点的信息来产生的。节点的信息可以有很多类型,对端节点的信息也可以有很多类型,例如,节点的信息可以包括以下至少之一:节点的标识信息、节点的IP地址、节点的端口;和/或,对端节点的信息可以包括以下至少之一:对端节点的标识信息、对端节点的IP地址、对端节点的端口。
在解决了线程之间的通信之后,对于通信的线程的关闭可以基于通信框架来进行,也可以由其他的方式来进行控制。
在一个可选的实施例中,可以提供对线程的关闭,例如,也可以通过代理实例关闭已通信结束的线程;和/或,在一个或多个通信线程中的所有通信线程的通信均已结束之后,该代理实例还可以注销对端节点。通过该方式,还提供了对通信结束的线程的处理。这样该可选的实施方式在应用到通信框架中之后,还可以很方便的控制线程的关闭。作为更优的实施方式,节点还可以关闭代理实例。通过这种方式可以节约节点的资源,从而可以进行其他的处理。
在本实施例中还提供了一种通信处理装置,该通信处理装置中的各个模块对应于上述实施例及可选实施方式中的步骤,已经进行过说明的在以下实施例中就不再赘述。
图2是根据本发明实施例的通信处理装置的结构框图,该装置位于节点中,如图2所示,该装置包括:
创建模块22,用于创建一个或多个通信线程,其中,通信线程用于与对端节点中的线程进行通信,通信线程包括以下至少之一:服务端线程、客户端线程;
通信模块24,用于通过一个或多个通信线程中的至少之一在节点和对端节点之间进行线程间通信。
通过上述模块可以在节点中创建进行通信的线程,从而实现了线程间的通信。上述方法可以应用到各种通信框架中,从而使各种通信框架能够支持线程间的通信。当然,上述的模块也可以应用到其他的通信处理中,应用到通信框架中是一种比较优的处理方式。
作为一个可选的实施方式,创建模块22,位于代理实例中,用于创建一个或多个通信线程;通信模块24位于代理实例中。
作为一个可选的实施方式,通信模块24包括:
发送单元,用于将来自一个或多个通信线程中的至少之一的消息发送给对端节点;和/或,接收单元,用于根据线程标识符将来自对端节点的消息路由到节点中对应的线程。
作为一个可选的实施方式,创建模块22,用于根据节点的信息创建代理实例;图3是根据本发明实施例的通信处理装置的可选结构框图,如图3所示,该装置还可以包括:注册模块32,位于代理实例中,用于根据对端节点的信息注册对端节点。
作为一个可选的实施方式,图3是根据本发明实施例的通信处理装置的可选结构框图,如图3所示,该装置还包括:线程关闭模块34,位于代理实例中,用于关闭已通信结束的线程;和/或,注销模块36,位于代理实例中,用于在一个或多个通信线程中的所有通信线程的通信均已结束之后,注销对端节点。
作为一个可选的实施方式,图3是根据本发明实施例的通信处理装置的可选结构框图,如图3所示,该装置还可以包括:代理实例关闭模块38,用于在注销模块36注销对端节点之后,关闭代理实例。
注册模块32、线程关闭模块34、注销模块36、代理实例关闭模块38这些模块可以作为一种可选的模块设置在代理实例中。
上述实施例以及可选的实施方式可以应用到多种通信框架中,下面结合一种通常使用的比较多的通信框架进行说明。
在本实施例中,说明了将上述实施例及可选实施方式实施到ZeroMQ的通信框架中。
在本实施例中的通信框架,可以支持不同设备跨进程、跨线程的通信,而不相互干扰。而且,本实施例中的底层通信对用户完全透明,使用方便,通信模块间具有较低的耦合度,可支持热扩展。
本实施例中的技术方案充分利用ZeroMQ轻量高效的特点及提供的多种消息传输模型和功能强大的通信模式来隐藏底层的通信细节,支持具有低耦合的,可动态加入的跨线程的通信。本实施例中的技术方案可以利用ZeroMQ中TCP传输模型构造请求-应答模式(DEALER-ROUTER),实现不同节点间多线程的网络通信。
并且,在本实施例中还可以通过注册(register)操作创建DEALER端套接字来注册其他节点,通过去注册(unregister)操作来关闭DEALER套接字注销节点,动态实现与其他节点进程间的通信。
在发送消息方面,节点进程内部通过ZeroMQ中INPROC通信模型构造推送-路由(PUSH-ROUTER)模式,在收集(Collector)模块中创建ROUTER服务器端套接字,节点间各线程使用PUSH套接字将消息发送给节点中的Collector模块,Collector模块接收到消息后,通过DEALTER客户端套接字发送给注册的各个节点。在接收消息方面,通过ZeroMQ中INPROC通信模型构造发布-订阅模式(PUB-SUB),在PUB端分别建立请求-分配器(request-dispatcher)、响应-分配器(response-dispatcher)套接字。当ROUTER服务器端的接收(Acceptor)模块接收到其他节点发送的消息后,根据消息的类型(request类型或reply类型)分别由对应的request-dispatcher或response-dispatcher套接字发布消息。每个线程(客户端client线程或服务端server线程)创建相应的SUB端套接字,需要订阅与自己相关主题,就可以接收其他节点线程发送过来的消息。线程可以通过订阅或取消订阅而动态地加入到接收消息通信中,并通过在DEALER端套接字发送消息。
图4是根据本发明实施例的服务器端接收客户请求处理流程图,如图4所示,该流程包括如下步骤:
步骤S401、根据本节点所在的ID(节点标识符),节点IP地址,节点通信端口,创建一个通信Agent进程。
步骤S402,启动Agent实例。
步骤S403,Agent实例注册需要与其他节点通信的节点,包括其他节点的节点ID,节点IP地址,节点端口。
步骤S404,Agent实例根据标识符(如BUCKET_ID)产生一个线程级别的server线程。
步骤S405,步骤S406,server线程接收并处理消息,然后发送消息。
步骤S407,判断业务逻辑是否完成,其中,如果判断出业务逻辑已完成,则执行步骤S408。
步骤S408,关闭server线程。
步骤S409,Agent实例注销其他节点。
步骤S410,关闭Agent实例。
图5是根据本发明实施例的客户端请求处理流程图,如图5所示,该流程包括如下步骤:
步骤S501,根据本节点所在的ID(节点标识符),节点IP地址,节点通信端口,创建一个通信Agent进程。
步骤S502,启动Agent实例。
步骤S503,Agent实例注册需要与其他节点通信的节点,包括其他节点的节点ID,节点IP地址,节点端口。
步骤S504,Agent实例根据标识符(如BUCKET_ID)产生一个线程级别的client线程。
步骤S505,步骤S506,client线程发送和接收消息。
步骤S507,判断业务逻辑是否完成,其中,在判断出业务逻辑已完成的情况下,则执行步骤S508,在判断出未业务逻辑未完成的情况下,返回执行步骤S505。
步骤S508,关闭client线程。
步骤S509,Agent实例注销其他节点。
步骤S510,关闭Agent实例。
在本实施例中,每个节点可以通过节点三元组(节点标识ID、节点IP、节点端口号PORT)来标识,创建好Agent实例后,如果要与其他节点通信,需要Agent通过其他节点三元组信息来注册。为将消息路由到某个具体的线程,需要在进程中对消息进行转发,其中线程级别的标识符BUCKET_ID用来将消息路由到对应的线程。这样在一个Agent实例中可以产生任意的server线程和client线程。如果业务逻辑完成,可以关闭某个client线程或server线程。如果不需要与某个节点通信,可以执行unregister操作注销此节点。如果不再需要通信,可以关闭Agent实例。
图6是根据本发明可选实施例的整体架构示意图,如图6所示,本通信框架隐藏了节点间通信的技术细节,用户感觉好像与对等节点在通信。实际上,数据通过代理实例(即,Agent实例)进行收集和转发,利用ZeroMQ底层通信库的传输模型和通信模式,传输到相对应的对端节点(即,节点1或节点2)。
下面对ZeroMQ消息库进行说明。
ZeroMQ是一个可嵌入的并发网络通信库,它提供不同种类的socket(套接字),这些套接字能通过不同的传输模式如INPROC(进程内通信)、IPC(进程间通信)、TCP、multicast(多播)来原子性地传递消息。开发者可以使用各种模式实现N:N的套接字连接,这些模式包括扇出、发布-订阅、任务分配和请求-应答。ZeroMQ的传输速度足够快,因此可充当集群产品的通信组件。它的异步I/O模型提供了可扩展的多核应用程序,用异步消息来处理任务。
ZeroMQ具有高性能、简单、可伸缩性等优点。它没有额外的协议如AMQP的开销,充分利用一些高效的传输方式如可靠性多播,利用智能消息批量机制,有效利用TCP/IP连接,最大程序地减少协议开销和***调用。ZeroMQ利用了ZeroMQ简单的API,发送消息只需发起一个异步调用,它自动将消息队列到一个单独的线程中,完成所有剩下的工作。本身不支持消息的序列化,在编码消息上,给开发者极大的灵活性,消息本身将被视为二进制块数据。
ZeroMQ提供基本的四种传输模型:1)INPROC:进程内的通信模型;2)IPC:进程间的通信模型;3)MULTICAST:多播模型,可能封装在UDP中;4)TCP:传统的TCP套接字模式。
ZeroMQ把通讯的需求看成四类。其中一类是一对一结对通讯,用来支持传统的TCPsocket模型,但并不推荐使用。常用的通讯模式只有三类。
1)请求回应(REQ-REP)模式。由请求端发起请求,并等待回应端回应请求。从请求端来看,一定是一对对收发配对的;反之,在回应端一定是发收对。请求端和回应端都可以是1:N的模型。通常把1认为是server,N认为是Client。ZeroMQ可以很好的支持路由功能(实现路由功能的组件叫作Device),把1:N扩展为N:M(只需要加入若干路由节点)。从这个模型看,更底层的端点地址是对上层隐藏的。每个请求都隐含有回应地址,而应用则不关心它。
2)发布订阅(PUB-SUB)模式。这个模式里,发布端是单向只发送数据的,且不关心是否把全部的信息都发送给订阅端。如果发布端开始发布信息的时候,订阅端尚未连接上来,这些信息直接丢弃。不过一旦订阅端连接上来,中间会保证没有信息丢失。同样,订阅端则只负责接收,而不能反馈。如果发布端和订阅端需要交互(比如要确认订阅者是否已经连接上),则使用额外的socket采用请求回应模型满足这个需求。
3)管道(PUSH-PULL)模式。这个模式里,管道是单向的,从PUSH端单向的向PULL端推送数据流。任何分布式,并行的需求,都可以用这三种模型组合起来解决,如生成我们本技术发明所需要使用的DEALER-ROUTER,PUSH-ROUTER模式。DEALER-ROUTER,PUSH-ROUTER模式能实现无阻塞的REQ-REP模式功能。
本实施例中使用的消息可以标识所要发送的节点和节点内的某个线程以及消息类型(reply或request)。图7是根据本发明可选实施例的整体架构示意图,如图7所示共分5个模块:
接收(Acceptor)模块用来负责接收其他节点发送的消息,当接收到一条消息后,Acceptor模块根据消息类型是请求消息(request)还是回应消息(reply),将消息分给相应的请求-分配器(request-dispatcher)或响应-分配器(response-dispatcher)模块。Request-dispatcher模块用来处理将客户端的请求消息发送给对应的服务器(server)线程,这用到了消息中的bucket来标识对应的server线程。Response-dispatcher模块用来处理将服务器端的响应消息发送给对应的客户端(client)线程,其中也是通过消息中的bucket来标识对应的client线程的。收集(Collectors)模块维护了与本节点所注册的其他节点socket集合。server线程或client线程需要发送的消息由Collector模块收集,由socket集合中对应的socket发送给对端节点。在本技术发明通信框架中,控制(Controller)模块用来动态控制通信节点的加入和移除。
图8是根据本发明实施例的通信框架所采用的ZeroMQ传输模式示意图,图8中显示了消息从节点2(node2)发送到节点1(node1),消息可以是由node2的服务器(server)线程发送到node1的客户端(client)线程,也可以是node2的client线程发送到node1的server线程。通信线程与采集(Collector)模块之间采用INPROC通信模型构造推送-路由(PUSH-ROUTER)模式套接字,collector ROUTER端套接字异步无阻塞地接收线程发送的数据。两节点间采用TCP传输模型构造请求-应答模式(DEALER-ROUTER),在请求(DEALER)端发送模块(senders)集合维护了此节点到其他通信节点的TCP socket集。根据消息中对应的nodeID,找到相应的socket,将消息发送给对应的节点应答(ROUTER)端套接字。Node1在接收(acceptor)模块接收消息后,根据消息的类型,由对应的请求-分配器(request-dispatcher)和响应-分配器(response-dispatcher)模块进行处理。Request-dispatcher模块处理client线程请求,与server线程采用INPROC通信模型构造发布-订阅模式(PUB-SUB),server线程通过订阅与本线程相关的主题(对应消息结构中的bucket),接收对应主题的消息。Response-dispatcher模块处理server线程的回应,与client线程采用INPROC通信模型构造发布-订阅模式(PUB-SUB),client线程通过订阅与本线程相关的主题(对应消息结构中的bucket),接收对应主题的消息。这样就完成了一次不同线程间的消息通信。节点进程与控制器(controller)模块之间采用INPROC通信模型构造管道(PUSH-PULL)模式,controller模块创建PULL套接字,接收node进程发送的注册(register)或去注册(unregister)节点的请求。当接收到register请求时,controller模块会创建相对应节点的DEALER端套接字,连接到对应的节点,然后将socket加入到senders集合中;当接收到unregister请求时,controller模块会注销对应的DEALER端套接字,并将socket从senders集合中移除。
本实施例中的通信框架支持不同节点间跨线程的通信,而不会相互干扰,同时,与进程的事务逻辑具有较低的耦合度,同时支持动态的添加和删除节点通信。
通过上述实施例避免了目前分布式通信框架复杂、庞大、臃肿的缺点。利用ZeroMQ通信库轻量高效的特点,在此基础构建分布式通信框架,这带来了以下优点中的至少之一:
(1)提供轻量级的、高效快速可靠的分布式通信。充分利用ZeroMQ中的多传输模型和独特的通信模式,降低了复杂性。
(2)底层通信对用户完全透明,使用方便。我们在ZeroMQ的基础上,提供简洁的API,使用方便切简单。
(3)支持不同机器跨进程,跨线程的通信,而不相互干扰。
(4)通信模块间具有较低的耦合度,可支持热扩展。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (14)
1.一种通信处理方法,其特征在于,包括:
在节点中创建一个或多个通信线程,其中,所述通信线程用于与对端节点中的线程进行通信,所述通信线程包括以下至少之一:服务端线程、客户端线程;
通过所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信。
2.根据权利要求1所述的方法,其特征在于,
在所述节点中创建所述一个或多个通信线程包括:在所述节点中通过设置的代理实例创建所述一个或多个通信线程;
通过所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信包括:所述代理实例使用所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信。
3.根据权利要求2所述的方法,其特征在于,所述代理实例使用所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信包括:
所述代理实例将来自所述一个或多个通信线程中的至少之一的消息发送给所述对端节点;
所述代理实例根据线程标识符将来自所述对端节点的消息路由到所述节点中对应的线程。
4.根据权利要求2所述的方法,其特征在于,在所述代理实例创建所述一个或多个通信线程之前,所述方法还包括:
在所述节点中根据所述节点的信息创建所述代理实例;
所述代理实例根据所述对端节点的信息注册所述对端节点。
5.根据权利要求4所述的方法,其特征在于,
所述节点的信息包括以下至少之一:所述节点的标识信息、所述节点的IP地址、所述节点的端口;和/或,
所述对端节点的信息包括以下至少之一:所述对端节点的标识信息、所述对端节点的IP地址、所述对端节点的端口。
6.根据权利要求2至5中任一项所述的方法,其特征在于,在通过所述一个或多个通信线程在所述节点和所述对端节点之间进行通信之后,所述方法还包括:
所述代理实例关闭已通信结束的通信线程;和/或,
在所述一个或多个通信线程中的所有通信线程的通信均已结束之后,所述代理实例注销所述对端节点。
7.根据权利要求6所述的方法,其特征在于,在所述代理实例注销所述对端节点之后,所述方法还包括:
在所述节点关闭所述代理实例。
8.一种通信处理装置,位于节点中,其特征在于,包括:
创建模块,用于创建一个或多个通信线程,其中,所述通信线程用于与对端节点中的线程进行通信,所述通信线程包括以下至少之一:服务端线程、客户端线程;
通信模块,用于通过所述一个或多个通信线程中的至少之一在所述节点和所述对端节点之间进行线程间通信。
9.根据权利要求8所述的装置,其特征在于,所述创建模块和所述通信模块,位于代理实例中。
10.根据权利要求9所述的装置,其特征在于,所述通信模块包括:
发送单元,用于将来自所述一个或多个通信线程中的至少之一的消息发送给所述对端节点;和/或,
接收单元,用于根据线程标识符将来自所述对端节点的消息路由到所述节点中对应的线程。
11.根据权利要求9所述的装置,其特征在于,
所述创建模块,用于根据所述节点的信息创建所述代理实例;
所述装置还包括:注册模块,位于所述代理实例中,用于根据所述对端节点的信息注册所述对端节点。
12.根据权利要求11所述的装置,其特征在于,
所述节点的信息包括以下至少之一:所述节点的标识信息、所述节点的IP地址、所述节点的端口;和/或,
所述对端节点的信息包括以下至少之一:所述对端节点的标识信息、所述对端节点的IP地址、所述对端节点的端口。
13.根据权利要求9至12中任一项所述的装置,其特征在于,所述装置还包括:
线程关闭模块,位于所述代理实例中,用于关闭已通信结束的线程;和/或,
注销模块,位于所述代理实例中个,用于在所述一个或多个通信线程中的所有通信线程的通信均已结束之后,注销所述对端节点。
14.根据权利要求13所述的装置,其特征在于,所述装置还包括:
代理实例关闭模块,用于在所述注销模块注销所述对端节点之后,关闭所述代理实例。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610505084.3A CN106209996A (zh) | 2016-06-27 | 2016-06-27 | 通信处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610505084.3A CN106209996A (zh) | 2016-06-27 | 2016-06-27 | 通信处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106209996A true CN106209996A (zh) | 2016-12-07 |
Family
ID=57462787
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610505084.3A Pending CN106209996A (zh) | 2016-06-27 | 2016-06-27 | 通信处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106209996A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108600011A (zh) * | 2018-04-26 | 2018-09-28 | 百度在线网络技术(北京)有限公司 | 通信网络数据传输的方法、装置、存储介质及终端设备 |
CN109257301A (zh) * | 2018-09-07 | 2019-01-22 | 国网江苏省电力有限公司苏州供电分公司 | 一种电力***网络中的消息分销方法和装置 |
CN109408248A (zh) * | 2018-09-19 | 2019-03-01 | 福建星网智慧科技股份有限公司 | 一种Linux下线程间通信*** |
CN113727113A (zh) * | 2020-05-26 | 2021-11-30 | 网易(杭州)网络有限公司 | 视频解码方法、推流方法及*** |
CN114629904A (zh) * | 2022-02-15 | 2022-06-14 | 广州伊智信息科技有限公司 | 一种分布式事件的处理方法、***、设备及介质 |
CN115150380A (zh) * | 2022-06-30 | 2022-10-04 | 广发证券股份有限公司 | 一种适用于多路行情源的行情订阅及发布方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716209A (zh) * | 2004-06-28 | 2006-01-04 | 英特尔公司 | 线程到线程通信 |
CN103197920A (zh) * | 2013-03-25 | 2013-07-10 | 华为技术有限公司 | 一种并发控制方法、控制节点及*** |
CN103744643A (zh) * | 2014-01-10 | 2014-04-23 | 浪潮(北京)电子信息产业有限公司 | 一种多线程程序下多节点并行架构的方法及装置 |
CN105786603A (zh) * | 2016-02-29 | 2016-07-20 | 青岛海尔智能家电科技有限公司 | 一种基于分布式的高并发业务处理***及方法 |
-
2016
- 2016-06-27 CN CN201610505084.3A patent/CN106209996A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716209A (zh) * | 2004-06-28 | 2006-01-04 | 英特尔公司 | 线程到线程通信 |
CN103197920A (zh) * | 2013-03-25 | 2013-07-10 | 华为技术有限公司 | 一种并发控制方法、控制节点及*** |
CN103744643A (zh) * | 2014-01-10 | 2014-04-23 | 浪潮(北京)电子信息产业有限公司 | 一种多线程程序下多节点并行架构的方法及装置 |
CN105786603A (zh) * | 2016-02-29 | 2016-07-20 | 青岛海尔智能家电科技有限公司 | 一种基于分布式的高并发业务处理***及方法 |
Non-Patent Citations (1)
Title |
---|
陈小辉, 刘心松, 左朝树, 陈建英: "《分布式并行数据库中基于调度的多线程通信模型之研究》", 《小型微型计算机***》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108600011A (zh) * | 2018-04-26 | 2018-09-28 | 百度在线网络技术(北京)有限公司 | 通信网络数据传输的方法、装置、存储介质及终端设备 |
CN108600011B (zh) * | 2018-04-26 | 2020-01-24 | 百度在线网络技术(北京)有限公司 | 通信网络数据传输的方法、装置、存储介质及终端设备 |
CN109257301A (zh) * | 2018-09-07 | 2019-01-22 | 国网江苏省电力有限公司苏州供电分公司 | 一种电力***网络中的消息分销方法和装置 |
CN109408248A (zh) * | 2018-09-19 | 2019-03-01 | 福建星网智慧科技股份有限公司 | 一种Linux下线程间通信*** |
CN113727113A (zh) * | 2020-05-26 | 2021-11-30 | 网易(杭州)网络有限公司 | 视频解码方法、推流方法及*** |
CN114629904A (zh) * | 2022-02-15 | 2022-06-14 | 广州伊智信息科技有限公司 | 一种分布式事件的处理方法、***、设备及介质 |
CN114629904B (zh) * | 2022-02-15 | 2024-05-24 | 广州伊智信息科技有限公司 | 一种分布式事件的处理方法、***、设备及介质 |
CN115150380A (zh) * | 2022-06-30 | 2022-10-04 | 广发证券股份有限公司 | 一种适用于多路行情源的行情订阅及发布方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106209996A (zh) | 通信处理方法和装置 | |
CN115362662B (zh) | 智能网络接口卡的流量管理 | |
US10795737B2 (en) | Generic distributed processing for multi-agent systems | |
CN112751826B (zh) | 算力应用流量转发方法及装置 | |
CN111193653B (zh) | 数据传输方法、装置、设备及存储介质 | |
CN109144660A (zh) | 微服务架构 | |
CN111224821B (zh) | 安全服务部署***、方法及装置 | |
CN105282191B (zh) | 负载均衡***、控制器和方法 | |
US20150003296A1 (en) | System and method for providing p2p based reconfigurable computing and structured data distribution | |
CN103763367A (zh) | 一种云计算数据中心分布式虚拟网络设计方法及*** | |
CN105763385B (zh) | 流量调度方法及装置 | |
CN102334112A (zh) | 用于虚拟机网络的方法和*** | |
EP2883123B1 (en) | Forwarding packet in stacking system | |
Redondi et al. | Towards a scaled iot pub/sub architecture for 5g networks: the case of multiaccess edge computing | |
CN113810206A (zh) | 一种网络自动化编排管理方法、实体、控制器及电子设备 | |
CN110928694A (zh) | 一种计算机*** | |
CN108965134A (zh) | 报文转发方法及装置 | |
CN112527523A (zh) | 面向高性能计算多云的分布式消息传递方法及*** | |
CN103827830B (zh) | 用于在事务性中间件机器环境中防止单点瓶颈的***和方法 | |
CN109474713A (zh) | 报文转发方法和装置 | |
Premkumar et al. | A survey of architecture, framework and algorithms for resource management in edge computing | |
WO2023179457A1 (zh) | 业务连接的标识方法、装置、***及存储介质 | |
CN109474523B (zh) | 基于sdn的组网方法和*** | |
Liu et al. | Stemflow: Software-defined inter-datacenter overlay as a service | |
CN104065754A (zh) | 一种基于p2p技术的无线传感器网络及其构建方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20161207 |
|
RJ01 | Rejection of invention patent application after publication |