一种进程间通讯的方法、及装置转让专利

申请号 : CN201310690566.7

文献号 : CN104133728B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 徐翠屏

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本发明实施例公开了一种进程间通讯的方法、及装置,其中方法的实现包括:根据待发送数据的目标节点寻找并确定对应的目标通道;将待发送数据写入确定的目标通道对应的共享存储空间内;若所述目标节点为本地节点,则确定的所述目标通道为本地通道,写入所述共享空间的待发送数据由所述目标节点的本地通道接收;若所述目标节点为远端节点,则确定的所述目标通道为远端代理通道,采用远端代理通道从所述共享空间接收所述待发送数据,并通过本地代理节点向对端代理节点发送所述待发送数据。以上方案,不需要关心通讯的进程是运行于同一主机还是不同主机,因此开发人员不需要了解机器内核跨机器间通信的机制和细节,因此可以提高开发效率,并减少出错。

权利要求 :

1.一种进程间通讯的方法,其特征在于,包括:

本地代理节点创建本地节点,并确定本地节点与其通道的对应关系,为所述本地节点对应的通道分配内存空间;或者,接收对端代理节点发送的通道信息,若本地未存储所述通道信息,则创建远端代理通道,并监听远端代理通道是否有数据接收;

根据待发送数据的目标节点寻找并确定对应的目标通道;将所述待发送数据写入确定的所述目标通道对应的共享存储空间内;

若所述目标节点为本地节点,则确定的所述目标通道为本地通道,写入所述共享存储空间的待发送数据由所述目标节点的本地通道接收;

若所述目标节点为远端节点,则确定的所述目标通道为远端代理通道,采用远端代理通道从所述共享存储空间接收所述待发送数据,并通过本地代理节点向对端代理节点发送所述待发送数据。

2.根据权利要求1所述方法,其特征在于,还包括:

通过本地代理节点接收来自对端代理节点的数据,并确定接收到的数据是否已经达到其在本地的目标通道的阈值,若是,则向对端代理节点发送暂停指示消息,指示所述对端代理节点暂停向所述目标通道写入数据。

3.根据权利要求2所述方法,其特征在于,还包括:

若所述本地的目标通道为暂停状态,并且没有数据,则向对端代理节点发送恢复指示,指示所述对端代理节点继续向所述目标通道写入数据。

4.根据权利要求1所述方法,其特征在于,在将所述待发送数据写入确定的所述目标通道对应的共享存储空间内之前,还包括:确定目标通道是否为暂停状态,若不是暂停状态,则将所述待发送数据写入确定的所述目标通道对应的共享存储空间内,否则停止向所述目标通道对应的共享存储空间写入数据,直到所述目标通道恢复为非暂停状态。

5.根据权利要求1至4任意一项所述方法,其特征在于,在通过本地代理节点向对端代理节点发送所述待发送数据之前,还包括:读取配置文件,确定对端代理节点的互联网协议地址以及端口号,并通过所述互联网协议地址以及端口号建立本地代理节点与所述对端代理节点之间的传输控制协议TCP连接;并通过所述TCP连接将非对端创建的通道发送给对端代理节点;通过所述TCP连接接收对端代理节点发送的非本地创建的通道,并建立接收到的通道对应的远端代理通道。

6.根据权利要求5所述方法,其特征在于,还包括:

若本地节点关闭,所述本地节点对应的通道与对端代理节点的连接关闭,且所述本地节点对应的通道没有被其他进程所使用,则销毁所述本地节点对应的通道。

7.一种装置,用于进程间通讯,其特征在于,包括:

节点管理单元,用于在根据待发送数据的目标节点寻找并确定对应的目标通道之前,通过本地代理节点创建本地节点,并确定本地节点与其通道的对应关系,为所述本地节点对应的通道分配内存空间;或者,接收对端代理节点发送的通道信息,若本地未存储所述通道信息,则创建远端代理通道,并监听远端代理通道是否有数据接收;

通道确定单元,用于根据待发送数据的目标节点寻找并确定对应的目标通道;

数据写入单元,用于将所述待发送数据写入所述通道确定单元确定的所述目标通道对应的共享存储空间内;

本地通道单元,用于若所述目标节点为本地节点,则确定的所述目标通道为本地通道,写入所述共享存储空间的待发送数据由所述目标节点的本地通道接收;

发送单元,用于若所述目标节点为远端节点,则确定的所述目标通道为远端代理通道,采用远端代理通道从所述共享存储空间接收所述待发送数据,并通过本地代理节点向对端代理节点发送所述待发送数据。

8.根据权利要求7所述装置,其特征在于,还包括:

接收单元,用于通过本地代理节点接收来自对端代理节点的数据;

阈值确定单元,用于确定接收到的数据是否已经达到其在本地的目标通道的阈值;

所述发送单元,还用于在所述阈值确定单元确定接收到的数据已经达到其在本地的目标通道的阈值后,则向对端代理节点发送暂停指示消息,指示所述对端代理节点暂停向所述目标通道写入数据。

9.根据权利要求8所述装置,其特征在于,还包括:

第一确定单元,用于确定所述本地的目标通道是否为暂停状态,是否有数据;

所述发送单元,还用于若所述第一确定单元确定所述本地的目标通道为暂停状态,并且没有数据,则向对端代理节点发送恢复指示,指示所述对端代理节点继续向所述目标通道写入数据。

10.根据权利要求7所述装置,其特征在于,

第二确定单元,用于在将所述待发送数据写入确定的所述目标通道对应的共享存储空间内之前,确定目标通道是否为暂停状态;

所述数据写入单元,还用于若所述第二确定单元确定不是暂停状态,则将所述待发送数据写入确定的所述目标通道对应的共享存储空间内,否则停止向所述目标通道对应的共享存储空间写入数据,直到所述目标通道恢复为非暂停状态。

11.根据权利要求7至10任意一项所述装置,其特征在于,还包括:同步管理单元,用于在通过本地代理节点向对端代理节点发送所述待发送数据之前,读取配置文件,确定对端代理节点的互联网协议地址以及端口号,并通过所述互联网协议地址以及端口号建立本地代理节点与所述对端代理节点之间的传输控制协议TCP连接;并通过所述TCP连接将非对端创建的通道发送给对端代理节点;通过所述TCP连接接收对端代理节点发送的非本地创建的通道,并建立接收到的通道对应的远端代理通道。

12.根据权利要求11所述装置,其特征在于,

所述同步管理单元,还用于若本地节点关闭,所述本地节点对应的通道与对端代理节点的连接关闭,且所述本地节点对应的通道没有被其他进程所使用,则销毁所述本地节点对应的通道。

说明书 :

一种进程间通讯的方法、及装置

技术领域

[0001] 本发明涉及计算机技术领域,特别涉及一种进程间通讯的方法、及装置。

背景技术

[0002] 网络服务开发过程中经常会碰到进程间通讯问题。进程间通讯又分为机器内的进程通讯和跨机器的进程通讯。对于机器内的进程通讯一般采用:管道、共享内存、消息队列、Unix Socket(一种操作系统的套接字)以及IPC(Inter-Process Communication,进程间通信)等技术。对于跨机器的进程通讯一般采用TCP(Transmission Control Protocol,传输控制协议)/UDP(User Datagram Protocol,用户数据包协议)Socket(套接字)方式。
[0003] 网络服务开发如果同时需要在机器内和跨机器作进程间通讯,就需要针对具体场景选择合适的IPC机制,并且对于机器内和跨机器进程间通讯分别封装和开发提供给上层应用使用。开发人员需要很了解机器内和跨机器进程间通讯机制和细节。这样应用开发效率比较低,也容易出错。

发明内容

[0004] 本发明实施例提供了一种进程间通讯的方法、及装置,用于提高开发效率,减少出错。
[0005] 一种进程间通讯的方法,包括:
[0006] 根据待发送数据的目标节点寻找并确定对应的目标通道;将所述待发送数据写入确定的所述目标通道对应的共享存储空间内;
[0007] 若所述目标节点为本地节点,则确定的所述目标通道为本地通道,写入所述共享空间的待发送数据由所述目标节点的本地通道接收;
[0008] 若所述目标节点为远端节点,则确定的所述目标通道为远端代理通道,采用远端代理通道从所述共享空间接收所述待发送数据,并通过本地代理节点向对端代理节点发送所述待发送数据。
[0009] 一种装置,用于进程间通讯,包括:
[0010] 通道确定单元,用于根据待发送数据的目标节点寻找并确定对应的目标通道;
[0011] 数据写入单元,用于将所述待发送数据写入所述通道确定单元确定的所述目标通道对应的共享存储空间内;
[0012] 本地通道单元,用于若所述目标节点为本地节点,则确定的所述目标通道为本地通道,写入所述共享空间的待发送数据由所述目标节点的本地通道接收;
[0013] 发送单元,用于若所述目标节点为远端节点,则确定的所述目标通道为远端代理通道,采用远端代理通道从所述共享空间接收所述待发送数据,并通过本地代理节点向对端代理节点发送所述待发送数据。
[0014] 从以上技术方案可以看出,本发明实施例具有以下优点:采用通道管理的方案,通过代理节点实现跨机通讯,不需要关心通讯的进程是运行于同一主机还是不同主机,因此开发人员不需要了解机器内核跨机器间通信的机制和细节,因此可以提高开发效率,并减少出错。

附图说明

[0015] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0016] 图1为本发明实施例方法流程示意图;
[0017] 图2为本发明实施例系统架构示意图;
[0018] 图3为本发明实施例方法流程示意图;
[0019] 图4为本发明实施例方法流程示意图;
[0020] 图5为本发明实施例方法流程示意图;
[0021] 图6为本发明实施例方法流程示意图;
[0022] 图7为本发明实施例方法流程示意图;
[0023] 图8为本发明实施例装置结构示意图;
[0024] 图9为本发明实施例装置结构示意图;
[0025] 图10为本发明实施例装置结构示意图;
[0026] 图11为本发明实施例装置结构示意图;
[0027] 图12为本发明实施例装置结构示意图;
[0028] 图13为本发明实施例装置结构示意图;
[0029] 图14为本发明实施例装置结构示意图;
[0030] 图15为本发明实施例终端结构示意图。

具体实施方式

[0031] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0032] 本发明实施例提供了一种进程间通讯的方法,如图1所示,包括:
[0033] 101:根据待发送数据的目标节点寻找并确定对应的目标通道;将上述待发送数据写入确定的上述目标通道对应的共享存储空间内;
[0034] 进一步地,本发明实施例还提供了进行流量控制的方案,该方案在数据的发送端进行发送控制,具体如下:在将上述待发送数据写入确定的上述目标通道对应的共享存储空间内之前,还包括:
[0035] 确定目标通道是否为暂停状态,若不是暂停状态,则将上述待发送数据写入确定的上述目标通道对应的共享存储空间内,否则停止向上述目标通道对应的共享存储空间写入数据,直到上述目标通道恢复为非暂停状态。
[0036] 在本实施例中,如果目标通道不是暂停状态,那么数据的发送将会持续,一旦目标通道的状态变为暂停状态,这将表示发送速度超过了接收方的限度,需要停止发送。目标通道的状态由接收端指定,在后续实施例中将给出更详细的说明。
[0037] 102:若上述目标节点为本地节点,则确定的上述目标通道为本地通道,写入上述共享空间的待发送数据由上述目标节点的本地通道接收;
[0038] 103:若上述目标节点为远端节点,则确定的上述目标通道为远端代理通道,采用远端代理通道从上述共享空间接收上述待发送数据,并通过本地代理节点向对端代理节点发送上述待发送数据。
[0039] 以上实施例,采用通道管理的方案,通过代理节点实现跨机通讯,不需要关心通讯的进程是运行于同一主机还是不同主机,因此开发人员不需要了解机器内核跨机器间通信的机制和细节,因此可以提高开发效率,并减少出错。
[0040] 进一步地,本发明实施例中所称的本地是指上述待发送数据的源端的设备本地,本领域技术人员可以理解的是该设备也可以作为数据的接收端使用,本发明实施例还提供了该设备作为数据的接收端使用的方案,并且在数据的接收端进行流量控制,具体如下:上述方法,还包括:
[0041] 通过本地代理节点接收来自对端代理节点的数据,并确定接收到的数据是否已经达到其在本地的目标通道的阈值,若是,则向对端代理节点发送暂停指示消息,指示上述对端代理节点暂停向上述目标通道写入数据。
[0042] 本领域技术人员可以理解的是,如果接收到的数据没有达到本地的目标通道的阈值,则可以继续接收数据。上述阈值是按照上述本地的目标通道所对应的存储空间来确定的,用于防止溢出。
[0043] 进一步地,本发明实施例还提供了进行流量控制以后,目标通道被暂停以后(即暂停数据传输以后)如何恢复数据传输的实现方案,具体如下:上述方法,还包括:
[0044] 若上述本地的目标通道为暂停状态,并且没有数据,则向对端代理节点发送恢复指示,指示上述对端代理节点继续向上述目标通道写入数据。
[0045] 可以理解的是,如果本地的目标通道不是暂停状态,当前应该处于数据的发送过程中。如果上述本地的目标通道为暂停状态,那么当前应该是没有进行数据通讯的,此时需要确定在何种情况下恢复通讯,本实施例给出了目标通道中没有数据的情况,实际上如果目标通道的数据量小于目标通道的数据总容量设定比例也是可以的,本发明实施例对此不作唯一性限定。
[0046] 进一步地,本发明实施例还提供了节点的创建方案,包含本地节点的创建以及依据对端代理节点的指示进行通道创建的方案,具体方案如下:在根据待发送数据的目标节点寻找并确定对应的目标通道之前,还包括:
[0047] 本地代理节点创建本地节点,并确定本地节点与其通道的对应关系,为上述本地节点对应的通道分配内存空间;或者,接收对端代理节点发送的通道信息,若本地未存储上述通道信息,则创建远端代理通道,并监听远端代理通道是否有数据接收。
[0048] 进一步地,本发明实施例还提供了跨设备的通道的信息如何同步的技术方案,采用代理节点完成通道信息的同步,具体如下:在通过本地代理节点向对端代理节点发送上述待发送数据之前,还包括:
[0049] 读取配置文件,确定对端代理节点的互联网协议地址以及端口号,并通过上述互联网协议地址以及端口号建立本地代理节点与上述对端代理节点之间的传输控制协议TCP连接;并通过上述TCP连接将非对端创建的通道发送给对端代理节点;通过上述TCP连接接收对端代理节点发送的非本地创建的通道,并建立接收到的通道对应的远端代理通道。
[0050] 进一步地,本发明实施例还提供了,通道删除的方案,具体如下:上述方法,还包括:
[0051] 若本地节点关闭,上述本地节点对应的通道与对端代理节点的连接关闭,且上述本地节点对应的通道没有被其他进程所使用,则销毁上述本地节点对应的通道。
[0052] 可以理解的是,销毁通道的目的在于释放不需要的存储空间,具体操作可以是将通道对应的存储空间内的信息进行销毁。销毁的过程可以是将该存储空间,例如内存释放使之能够被再次使用,并不一定需要进行存储空间进行初始化操作。
[0053] 以下实施例就本发明实施例的几个重要方面进行分别举例说明。
[0054] 本发明实施例采用的是基于共享内存的进程间通讯的中间件方案。开发人员可以使用它方便地实现进程间的数据交换,而不用关心需要交换数据的进程是运行在同一主机还是在不同的主机。当进程处于同一主机时,数据通过共享内存传输;而对于不同主机上的进程,该中间件会将数据由代理服务(Agent)通过TCP/IP传输到远程主机。
[0055] 一、该中间件方案如图2所示,包含如下几个部分:
[0056] host1和host2是两个主机设备;在host1中包含了两个数据收发点(peer),peer1和peer2,分别属于各自的进程;在host2中包含了两个数据收发点(peer),peer3和peer4,分别属于各自的进程;每个主机可以包含的进程可以有很多,每个进程包含的peer也可以有很多,图2仅作为一个示意,不应理解为对本发明实施例的限定。Agent所在的进程执行的是代理服务,可以称为代理节点。以下分别对图2所示的各部分进行详细介绍如下:
[0057] 数据收发点(peer):中间件为开发人员提供的客户端开发包,使用该开发包创建具体peer用来接收和发送消息。
[0058] 通道(channel):实际上是一块共享内存。当创建一个peer时,中间件创建一个同名的channel与这个peer绑定。每个channel都有一个唯一的id,所以存在多个channel名称相同的channel集合。peer通过这个channel接收数据;发送数据时,中间件会先找到与目标peer绑定的channel,并将数据写入到这个目标channe中。通道分为本地通道(local channel)和远端代理通道(remote channel proxy)。在图2所示远端代理通道有:在host1中的host2_channel4_proxy、host2_channel3_proxy;在host2中的有host1_channel1_proxy、host1_channel2_proxy。
[0059] 通道索引(channel index):实际上是一块共享内存。存储着所有channel对应的共享内存key(关键字)。
[0060] 消息(message):每次调用peer的send函数发送的数据视为一条消息,peer的recv函数(用于已连接的数据报或流式套接口进行数据的接收的函数)每次被调用,会接收一条完整的消息。
[0061] 中间件主要包括2个组件:
[0062] (1)为开发人员提供的客户端开发包。
[0063] (2)进行跨机器进程间通讯的代理服务Agent。
[0064] 二、重要数据结构
[0065] 本发明实施例是基于共享内存的进程间通讯中间件,通道、通道索引、消息在共享内存中的数据结构如下:
[0066] (1)通道(channel),如下表1所示
[0067] 表1
[0068]
[0069]
[0070] (2)通道索引(channel index),如下表2所示:
[0071] 表2
[0072]
[0073] (3)消息(message):
[0074] 消息是中间件数据传输的基本单位,消息在传输的过程中会被打报成数据包,数据包的最大长度是8K字节,当消息的长度超过8K字节时,它会被分片,即分成多个数据包传输,接收端会将这些分片组装成一条完整的消息。数据包的结构如下表3所示:
[0075] 表3
[0076]
[0077] 三、重要流程介绍
[0078] (1)channel创建:channel的创建流程分为中间件客户端主动创建的本地通道和代理服务Agent接收对端传过来的channel信息创建的远端代理通道。
[0079] 其中,中间件客户端主动创建的本地通道的流程如图3所示,包括:
[0080] 301:创建一个本地peer;
[0081] 302:绑定访问channel index,获取peer对应的channel shm key和channel sem key;
[0082] 上述channel index存储的信息以及用途在前面实施例中已有介绍,channel shm key和channel sem key分别是用于标识channel shm以及channel sem的关键字;channel shm是用来接收数据的通道,channel sem是用来搜索用的通道。
[0083] 303:创建并绑定channel shm key和channel sem key;
[0084] 304:初始化channel shm;
[0085] 本步骤是将通道对应的存储空间进行初始化。如图2所示的channel1~channel4。
[0086] 305:将channel加入到channel管理器中,并监听该channel是否有数据接收。
[0087] 代理服务Agent接收对端传过来的channel信息创建的远端代理通道的流程,如图4所示,包括:
[0088] 401:Agent接收对端发送的channel信息;
[0089] 具体可以是对端的Agent发送的channel信息。
[0090] 402:判断接收到的channel信息对应的channel是否存在,如果存在可以结束流程,否则,进入403;
[0091] 403:创建一个远端代理peer;
[0092] 例 如,图 2所 示 的 host2_channel4_proxy、host2_channel3_proxy;host1_channel1_proxy、host1_channel2_proxy均为远端代理peer对应的channel;
[0093] 404:绑定访问channel index获取peer对应的channel shm key和channel sem key;
[0094] 405:创建并绑定channel shm key和channel sem key;
[0095] 406:初始化channel shm;
[0096] 407:将channel加入到channel管理器中,并监听该channel是否有数据接收。
[0097] 本实施例中,创建channel,会在内存中维护channel信息并且创建对应的channel共享内存。
[0098] (2)跨机器channel同步:在本实施例中可以部署为前端Agent(代理)和后端Agent,前端Agent需要读取remotehost.xml(远端主机的信息)获取所有后端Agent信息,包括IP(互联网协议地址)和Port(端口)信息,并且主动和这些后端Agent建立TCP连接进行通讯。host1和host2进行channel同步,具体流程如图5所示,包括:
[0099] 501A:读取配置文件,获取Agent IP和Port已经包括的channel index配置信息;
[0100] 在本实施例中,Agent的配置文件需要包含以下信息:
[0101] 1、Agent IP和Port;
[0102] 2、channel index的共享内存key、信号量key;
[0103] 3、可管理的channel的最大个数;
[0104] 4、channel对应共享内存最大尺寸。
[0105] 502A:初始化channel index shm;
[0106] 503A:读取remotehost.xml获取所有对端Agent IP和port信息;
[0107] 504A:创建和对端Agent的TCP连接;
[0108] 505A:定时从channel indx获取所有新的非Agent创建的channel,并发送给对端Agent;
[0109] 506A:接收对端Agent发送的新的channel信息,并建立相应的远端channel代理。
[0110] 在图5所示的501B~506B是与上述步骤501A~506A完全对应的步骤,再次不再一一赘述。
[0111] (3)、消息传输,如图6所示,包括如下步骤:
[0112] 601:调用peer的send方法;
[0113] 602:根据目标peer名称到channel管理器找到对应的目标channel列表;
[0114] 603:从channel列表中取出目标channel;
[0115] 604:将数据写入到上述channel对应的shm中;
[0116] 605:确定上述shm对应的channel是否是本地channel;如果是,进入606,否则进入607;
[0117] 606:本地channel接收数据。
[0118] 607:远端代理channel接收数据;
[0119] 608:代理Agent将远端代理channel接收到的数据发送到对端代理Agent。
[0120] 在本实施例中有以下两点需要说明如下:
[0121] 1.在本实施例的中间件中有channel管理器会循环检测和读取本进程创建的channel中是否有数据接收,并且每次都会刷新channel的时间戳属性(timestamp),如果有数据接收返回给用户。同时本地进程也可以通过channel index获取其他进程创建的channel,并且会定时检查这些channel时间戳属性(timestamp)是否有更新来判断channel是否已经关闭,如果已经关闭就会将该channel内存信息进行销毁。具体参考后续实施例中关于channel销毁的说明。
[0122] 2.在本实施例中,通过目标channel名称可能会获取到多个channel(channel id不同),会按顺序每次获取一个作为目标channel进行消息通讯,这种机制也很好做到负载均衡。
[0123] (4)流量控制,具体流程如图7所示,包括如下步骤:
[0124] 701:peer调用peer的send方法;
[0125] 702:从channel shm存储的channel状态信息中获取channel状态;
[0126] 703:判断目标channel是否为暂停状态,如果是,则暂停数据发送;如果否,进入704;
[0127] 704:将数据写入到对应的目标channel shm中;
[0128] 705:将数据写入共享内存;
[0129] 706:Agent1读取远端channel sham数据并发送到对端Agent(Agent2)[0130] 707:接收对端Agent发送的数据;
[0131] 708:获取channel数据状态;
[0132] 709:判断channel数据是否达到阈值;如果是,进入710,否则进入712;
[0133] 710:发送暂停接收指示给对端Agent;
[0134] 711:接收对端channel暂停请求并设置channel状态为暂停;并将设置channel状态为暂停;
[0135] 712:将数据写入到相应channel shm中。
[0136] 713:如果channel状态为暂停,则定时执行本步骤:定时判断channel状态为暂停并且channel中没有数据,则将channel状态恢复正常。恢复正常的方式,可以是向对端Agent发送指示消息,指示将该channel状态恢复正常。
[0137] (5)channel销毁,在本实施例中channel销毁规则如下:
[0138] 1、创建的Peer关闭,对应的channel内存信息将被销毁。
[0139] 2、接收到对端Agent的连接关闭请求,将由该Agent传递过来并且建立的channel内存信息全部销毁。
[0140] 3、channel同一时刻可能会被多个进程在使用,只有所有进程都销毁该channel内存信息,该channel对应的共享内存在会被真正从系统删除。
[0141] 本发明是一个基于共享内存的进程间通讯的中间件方案。提供开发包和跨机器通讯Agent。只需要创建具体Peer和channel就可以和目标Peer和channel通讯。不用关心需要通讯的进程是运行在同一主机还是在不同的主机。
[0142] 本发明实施例还提供了一种装置,用于进程间通讯,如图8所示,包括:
[0143] 通道确定单元801,用于根据待发送数据的目标节点寻找并确定对应的目标通道;
[0144] 数据写入单元802,用于将上述待发送数据写入上述通道确定单元801确定的上述目标通道对应的共享存储空间内;
[0145] 本地通道单元803,用于若上述目标节点为本地节点,则确定的上述目标通道为本地通道,写入上述共享空间的待发送数据由上述目标节点的本地通道接收;
[0146] 发送单元804,用于若上述目标节点为远端节点,则确定的上述目标通道为远端代理通道,采用远端代理通道从上述共享空间接收上述待发送数据,并通过本地代理节点向对端代理节点发送上述待发送数据。
[0147] 以上实施例,采用通道管理的方案,通过代理节点实现跨机通讯,不需要关心通讯的进程是运行于同一主机还是不同主机,因此开发人员不需要了解机器内核跨机器间通信的机制和细节,因此可以提高开发效率,并减少出错。
[0148] 进一步地,本发明实施例中所称的本地是指上述待发送数据的源端的设备本地,本领域技术人员可以理解的是该设备也可以作为数据的接收端使用,本发明实施例还提供了该设备作为数据的接收端使用的方案,并且在数据的接收端进行流量控制,具体如下:如图9所示,上述装置,还包括:
[0149] 接收单元901,用于通过本地代理节点接收来自对端代理节点的数据;
[0150] 阈值确定单元902,用于确定接收到的数据是否已经达到其在本地的目标通道的阈值;
[0151] 上述发送单元804,还用于在上述阈值确定单元902确定接收到的数据已经达到其在本地的目标通道的阈值后,则向对端代理节点发送暂停指示消息,指示上述对端代理节点暂停向上述目标通道写入数据。
[0152] 本领域技术人员可以理解的是,如果接收到的数据没有达到本地的目标通道的阈值,则可以继续接收数据。上述阈值是按照上述本地的目标通道所对应的存储空间来确定的,用于防止溢出。
[0153] 进一步地,本发明实施例还提供了进行流量控制以后,目标通道被暂停以后(即暂停数据传输以后)如何恢复数据传输的实现方案,具体如下:如图10所示,上述装置,还包括:
[0154] 第一确定单元1001,用于确定上述本地的目标通道是否为暂停状态,是否有数据;
[0155] 上述发送单元804,还用于若上述第一确定单元1001确定上述本地的目标通道为暂停状态,并且没有数据,则向对端代理节点发送恢复指示,指示上述对端代理节点继续向上述目标通道写入数据。
[0156] 可以理解的是,如果本地的目标通道不是暂停状态,当前应该处于数据的发送过程中。如果上述本地的目标通道为暂停状态,那么当前应该是没有进行数据通讯的,此时需要确定在何种情况下恢复通讯,本实施例给出了目标通道中没有数据的情况,实际上如果目标通道的数据量小于目标通道的数据总容量设定比例也是可以的,本发明实施例对此不作唯一性限定。
[0157] 进一步地,本发明实施例还提供了进行流量控制的方案,该方案在数据的发送端进行发送控制,具体如下:如图11所示,上述装置,还包括:
[0158] 第二确定单元1101,用于在将上述待发送数据写入确定的上述目标通道对应的共享存储空间内之前,确定目标通道是否为暂停状态;
[0159] 上述数据写入单元802,还用于若上述第二确定单元1101确定不是暂停状态,则将上述待发送数据写入确定的上述目标通道对应的共享存储空间内,否则停止向上述目标通道对应的共享存储空间写入数据,直到上述目标通道恢复为非暂停状态。
[0160] 在本实施例中,如果目标通道不是暂停状态,那么数据的发送将会持续,一旦目标通道的状态变为暂停状态,这将表示发送速度超过了接收方的限度,需要停止发送。目标通道的状态由接收端指定,在后续实施例中将给出更详细的说明。
[0161] 进一步地,本发明实施例还提供了节点的创建方案,包含本地节点的创建以及依据对端代理节点的指示进行通道创建的方案,具体方案如下:如图12所示,上述装置,还包括:
[0162] 节点管理单元1201,用于在根据待发送数据的目标节点寻找并确定对应的目标通道之前,通过本地代理节点创建本地节点,并确定本地节点与其通道的对应关系,为上述本地节点对应的通道分配内存空间;或者,接收对端代理节点发送的通道信息,若本地未存储上述通道信息,则创建远端代理通道,并监听远端代理通道是否有数据接收。
[0163] 进一步地,本发明实施例还提供了跨设备的通道的信息如何同步的技术方案,采用代理节点完成通道信息的同步,具体如下:如图13所示,上述装置,还包括:
[0164] 同步管理单元1301,用于在通过本地代理节点向对端代理节点发送上述待发送数据之前,读取配置文件,确定对端代理节点的互联网协议地址以及端口号,并通过上述互联网协议地址以及端口号建立本地代理节点与上述对端代理节点之间的传输控制协议TCP连接;并通过上述TCP连接将非对端创建的通道发送给对端代理节点;通过上述TCP连接接收对端代理节点发送的非本地创建的通道,并建立接收到的通道对应的远端代理通道。
[0165] 可选地,本发明实施例还提供了,通道删除的方案,具体如下:上述同步管理单元1301,还用于若本地节点关闭,上述本地节点对应的通道与对端代理节点的连接关闭,且上述本地节点对应的通道没有被其他进程所使用,则销毁上述本地节点对应的通道。
[0166] 可以理解的是,销毁通道的目的在于释放不需要的存储空间,具体操作可以是将通道对应的存储空间内的信息进行销毁。销毁的过程可以是将该存储空间,例如内存释放使之能够被再次使用,并不一定需要进行存储空间进行初始化操作。
[0167] 本发明实施例还提供了一种装置,用于进程间通讯,如图14所示,包括:接收器1401、发射器1402、处理器1403以及存储器1404;
[0168] 其中,处理器1403,用于根据待发送数据的目标节点寻找并确定对应的目标通道;将上述待发送数据写入确定的上述目标通道对应的共享存储空间内;若上述目标节点为本地节点,则确定的上述目标通道为本地通道,写入上述共享空间的待发送数据由上述目标节点的本地通道接收;若上述目标节点为远端节点,则确定的上述目标通道为远端代理通道,采用远端代理通道从上述共享空间接收上述待发送数据,并通过本地代理节点向对端代理节点发送上述待发送数据。
[0169] 以上实施例,采用通道管理的方案,通过代理节点实现跨机通讯,不需要关心通讯的进程是运行于同一主机还是不同主机,因此开发人员不需要了解机器内核跨机器间通信的机制和细节,因此可以提高开发效率,并减少出错。
[0170] 进一步地,本发明实施例还提供了进行流量控制的方案,该方案在数据的发送端进行发送控制,具体如下:上述处理器1403,还用于在将上述待发送数据写入确定的上述目标通道对应的共享存储空间内之前,确定目标通道是否为暂停状态,若不是暂停状态,则将上述待发送数据写入确定的上述目标通道对应的共享存储空间内,否则停止向上述目标通道对应的共享存储空间写入数据,直到上述目标通道恢复为非暂停状态。
[0171] 在本实施例中,如果目标通道不是暂停状态,那么数据的发送将会持续,一旦目标通道的状态变为暂停状态,这将表示发送速度超过了接收方的限度,需要停止发送。目标通道的状态由接收端指定,在后续实施例中将给出更详细的说明。
[0172] 进一步地,本发明实施例中所称的本地是指上述待发送数据的源端的设备本地,本领域技术人员可以理解的是该设备也可以作为数据的接收端使用,本发明实施例还提供了该设备作为数据的接收端使用的方案,并且在数据的接收端进行流量控制,具体如下:上述处理器1403,还用于通过本地代理节点接收来自对端代理节点的数据,并确定接收到的数据是否已经达到其在本地的目标通道的阈值,若是,则向对端代理节点发送暂停指示消息,指示上述对端代理节点暂停向上述目标通道写入数据。
[0173] 本领域技术人员可以理解的是,如果接收到的数据没有达到本地的目标通道的阈值,则可以继续接收数据。上述阈值是按照上述本地的目标通道所对应的存储空间来确定的,用于防止溢出。
[0174] 进一步地,本发明实施例还提供了进行流量控制以后,目标通道被暂停以后(即暂停数据传输以后)如何恢复数据传输的实现方案,具体如下:上述处理器1403,还用于若上述本地的目标通道为暂停状态,并且没有数据,则向对端代理节点发送恢复指示,指示上述对端代理节点继续向上述目标通道写入数据。
[0175] 可以理解的是,如果本地的目标通道不是暂停状态,当前应该处于数据的发送过程中。如果上述本地的目标通道为暂停状态,那么当前应该是没有进行数据通讯的,此时需要确定在何种情况下恢复通讯,本实施例给出了目标通道中没有数据的情况,实际上如果目标通道的数据量小于目标通道的数据总容量设定比例也是可以的,本发明实施例对此不作唯一性限定。
[0176] 进一步地,本发明实施例还提供了节点的创建方案,包含本地节点的创建以及依据对端代理节点的指示进行通道创建的方案,具体方案如下:上述处理器1403,还用于在根据待发送数据的目标节点寻找并确定对应的目标通道之前,本地代理节点创建本地节点,并确定本地节点与其通道的对应关系,为上述本地节点对应的通道分配内存空间;或者,接收对端代理节点发送的通道信息,若本地未存储上述通道信息,则创建远端代理通道,并监听远端代理通道是否有数据接收。
[0177] 进一步地,本发明实施例还提供了跨设备的通道的信息如何同步的技术方案,采用代理节点完成通道信息的同步,上述处理器1403,还用于在通过本地代理节点向对端代理节点发送上述待发送数据之前,读取配置文件,确定对端代理节点的互联网协议地址以及端口号,并通过上述互联网协议地址以及端口号建立本地代理节点与上述对端代理节点之间的传输控制协议TCP连接;并通过上述TCP连接将非对端创建的通道发送给对端代理节点;通过上述TCP连接接收对端代理节点发送的非本地创建的通道,并建立接收到的通道对应的远端代理通道。
[0178] 进一步地,本发明实施例还提供了,通道删除的方案,具体如下:上述处理器1403,还用于若本地节点关闭,上述本地节点对应的通道与对端代理节点的连接关闭,且上述本地节点对应的通道没有被其他进程所使用,则销毁上述本地节点对应的通道。
[0179] 可以理解的是,销毁通道的目的在于释放不需要的存储空间,具体操作可以是将通道对应的存储空间内的信息进行销毁。销毁的过程可以是将该存储空间,例如内存释放使之能够被再次使用,并不一定需要进行存储空间进行初始化操作。
[0180] 本发明实施例还提供了一种终端,如图15所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端可以为包括手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point of Sales,销售终端)、车载电脑等任意终端设备,以终端为手机为例:
[0181] 图15示出的是与本发明实施例提供的终端相关的手机的部分结构的框图。参考图15,手机包括:射频(Radio Frequency,RF)电路1510、存储器1520、输入单元1530、显示单元1540、传感器1550、音频电路1560、无线保真(wireless fidelity,WiFi)模块1570、处理器1580、以及电源1590等部件。本领域技术人员可以理解,图15中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0182] 下面结合图15对手机的各个构成部件进行具体的介绍:
[0183] RF电路1510可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器1580处理;另外,将设计上行的数据发送给基站。通常,RF电路1510包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(Low Noise Amplifier,LNA)、双工器等。此外,RF电路1510还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(Global System of Mobile communication,GSM)、通用分组无线服务(General Packet Radio Service,GPRS)、码分多址(Code Division Multiple Access,CDMA)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、长期演进(Long Term Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service,SMS)等。
[0184] 存储器1520可用于存储软件程序以及模块,处理器1580通过运行存储在存储器1520的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器1520可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1520可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0185] 输入单元1530可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元1530可包括触控面板1531以及其他输入设备1532。触控面板1531,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板1531上或在触控面板1531附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板1531可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器1580,并能接收处理器1580发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1531。除了触控面板1531,输入单元1530还可以包括其他输入设备1532。具体地,其他输入设备1532可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
[0186] 显示单元1540可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元1540可包括显示面板1541,可选的,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板1541。进一步的,触控面板1531可覆盖显示面板1541,当触控面板1531检测到在其上或附近的触摸操作后,传送给处理器1580以确定触摸事件的类型,随后处理器1580根据触摸事件的类型在显示面板1541上提供相应的视觉输出。虽然在图15中,触控面板1531与显示面板1541是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板1531与显示面板1541集成而实现手机的输入和输出功能。
[0187] 手机还可包括至少一种传感器1550,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1541的亮度,接近传感器可在手机移动到耳边时,关闭显示面板
1541和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
[0188] 音频电路1560、扬声器1561,传声器1562可提供用户与手机之间的音频接口。音频电路1560可将接收到的音频数据转换后的电信号,传输到扬声器1561,由扬声器1561转换为声音信号输出;另一方面,传声器1562将收集的声音信号转换为电信号,由音频电路1560接收后转换为音频数据,再将音频数据输出处理器1580处理后,经RF电路1510以发送给比如另一手机,或者将音频数据输出至存储器1520以便进一步处理。
[0189] WiFi属于短距离无线传输技术,手机通过WiFi模块1570可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图15示出了WiFi模块1570,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
[0190] 处理器1580是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1520内的软件程序和/或模块,以及调用存储在存储器1520内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1580可包括一个或多个处理单元;优选的,处理器1580可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1580中。
[0191] 手机还包括给各个部件供电的电源1590(比如电池),优选的,电源可以通过电源管理系统与处理器1580逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
[0192] 尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
[0193] 在本发明实施例中,该终端所包括的处理器1580还具有以下功能:
[0194] 根据待发送数据的目标节点寻找并确定对应的目标通道;将上述待发送数据写入确定的上述目标通道对应的共享存储空间内;若上述目标节点为本地节点,则确定的上述目标通道为本地通道,写入上述共享空间的待发送数据由上述目标节点的本地通道接收;若上述目标节点为远端节点,则确定的上述目标通道为远端代理通道,采用远端代理通道从上述共享空间接收上述待发送数据,并通过本地代理节点向对端代理节点发送上述待发送数据。
[0195] 以上实施例,采用通道管理的方案,通过代理节点实现跨机通讯,不需要关心通讯的进程是运行于同一主机还是不同主机,因此开发人员不需要了解机器内核跨机器间通信的机制和细节,因此可以提高开发效率,并减少出错。
[0196] 进一步地,本发明实施例还提供了进行流量控制的方案,该方案在数据的发送端进行发送控制,具体如下:上述处理器1580,还用于在将上述待发送数据写入确定的上述目标通道对应的共享存储空间内之前,确定目标通道是否为暂停状态,若不是暂停状态,则将上述待发送数据写入确定的上述目标通道对应的共享存储空间内,否则停止向上述目标通道对应的共享存储空间写入数据,直到上述目标通道恢复为非暂停状态。
[0197] 在本实施例中,如果目标通道不是暂停状态,那么数据的发送将会持续,一旦目标通道的状态变为暂停状态,这将表示发送速度超过了接收方的限度,需要停止发送。目标通道的状态由接收端指定,在后续实施例中将给出更详细的说明。
[0198] 进一步地,本发明实施例中所称的本地是指上述待发送数据的源端的设备本地,本领域技术人员可以理解的是该设备也可以作为数据的接收端使用,本发明实施例还提供了该设备作为数据的接收端使用的方案,并且在数据的接收端进行流量控制,具体如下:上述处理器1580,还用于通过本地代理节点接收来自对端代理节点的数据,并确定接收到的数据是否已经达到其在本地的目标通道的阈值,若是,则向对端代理节点发送暂停指示消息,指示上述对端代理节点暂停向上述目标通道写入数据。
[0199] 本领域技术人员可以理解的是,如果接收到的数据没有达到本地的目标通道的阈值,则可以继续接收数据。上述阈值是按照上述本地的目标通道所对应的存储空间来确定的,用于防止溢出。
[0200] 进一步地,本发明实施例还提供了进行流量控制以后,目标通道被暂停以后(即暂停数据传输以后)如何恢复数据传输的实现方案,具体如下:上述处理器1580,还用于若上述本地的目标通道为暂停状态,并且没有数据,则向对端代理节点发送恢复指示,指示上述对端代理节点继续向上述目标通道写入数据。
[0201] 可以理解的是,如果本地的目标通道不是暂停状态,当前应该处于数据的发送过程中。如果上述本地的目标通道为暂停状态,那么当前应该是没有进行数据通讯的,此时需要确定在何种情况下恢复通讯,本实施例给出了目标通道中没有数据的情况,实际上如果目标通道的数据量小于目标通道的数据总容量设定比例也是可以的,本发明实施例对此不作唯一性限定。
[0202] 进一步地,本发明实施例还提供了节点的创建方案,包含本地节点的创建以及依据对端代理节点的指示进行通道创建的方案,具体方案如下:上述处理器1580,还用于在根据待发送数据的目标节点寻找并确定对应的目标通道之前,本地代理节点创建本地节点,并确定本地节点与其通道的对应关系,为上述本地节点对应的通道分配内存空间;或者,接收对端代理节点发送的通道信息,若本地未存储上述通道信息,则创建远端代理通道,并监听远端代理通道是否有数据接收。
[0203] 进一步地,本发明实施例还提供了跨设备的通道的信息如何同步的技术方案,采用代理节点完成通道信息的同步,上述处理器1580,还用于在通过本地代理节点向对端代理节点发送上述待发送数据之前,读取配置文件,确定对端代理节点的互联网协议地址以及端口号,并通过上述互联网协议地址以及端口号建立本地代理节点与上述对端代理节点之间的传输控制协议TCP连接;并通过上述TCP连接将非对端创建的通道发送给对端代理节点;通过上述TCP连接接收对端代理节点发送的非本地创建的通道,并建立接收到的通道对应的远端代理通道。
[0204] 进一步地,本发明实施例还提供了,通道删除的方案,具体如下:上述处理器1580,还用于若本地节点关闭,上述本地节点对应的通道与对端代理节点的连接关闭,且上述本地节点对应的通道没有被其他进程所使用,则销毁上述本地节点对应的通道。
[0205] 可以理解的是,销毁通道的目的在于释放不需要的存储空间,具体操作可以是将通道对应的存储空间内的信息进行销毁。销毁的过程可以是将该存储空间,例如内存释放使之能够被再次使用,并不一定需要进行存储空间进行初始化操作。
[0206] 值得注意的是,上述装置实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
[0207] 另外,本领域普通技术人员可以理解实现上述各方法实施例中的全部或部分步骤是可以通过程序来指令相关的硬件完成,相应的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0208] 以上仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。