首页 / 专利库 / 电脑零配件 / 配对 / 实时的基于云的消息传递系统

实时的基于的消息传递系统

阅读:1052发布:2020-05-18

专利汇可以提供实时的基于的消息传递系统专利检索,专利查询,专利分析的服务。并且所描述的 实施例 可以经由websocket连接来提供消息。消息传递系统可以经由消息传递系统实例在第一网络上维持在多个本地连接器中的每一个与每一个消息传递系统实例之间的多个持久的websocket连接。消息传递系统可以接收要发送到所述多个本地连接器中的本地连接器的第二网络上的端点的消息。消息传递系统可以经由将本地连接器端点与消息传递实例相关联的注册表,识别多个消息传递系统实例中将消息发送到端点所经由的消息传递系统实例。所述消息传递系统实例可以维持到与端点通信的本地连接器的websocket连接。消息传递系统实例可以经由到本地连接器的websocket连接将所述消息传输到所述端点。,下面是实时的基于的消息传递系统专利的具体信息内容。

1.一种用于经由websocket连接提供消息的系统,包括:
包括多个消息传递系统实例的消息传递系统,所述消息传递系统被配置为经由所述消息传递系统的多个消息传递系统实例在第一网络上维持在多个本地连接器中的每一个与所述多个消息传递系统实例中的每一个之间的多个持久的websocket连接;
接收要发送到所述多个本地连接器中的本地连接器的第二网络上的端点的消息;以及经由将本地连接器端点与消息传递实例相关联的注册表,识别所述多个消息传递系统实例中将所述消息发送到所述端点所经由的消息传递系统实例,所述消息传递系统实例维持到与所述端点通信的本地连接器的websocket连接,
其中,所述消息传递系统实例被配置为经由到所述本地连接器的websocket连接将所述消息传输到所述端点。
2.根据权利要求1所述的系统,其中,所述消息传递实例与所述本地连接器建立所述websocket连接,并在发布/订阅信道中创建订阅,所述订阅标识用于识别所述websocket连接的连接标识符。
3.根据权利要求1所述的系统,其中,为了识别所述多个消息传递系统实例中的消息传递系统实例,所述消息传递系统还被配置为将所述消息提交给候选消息传递系统实例,以及
其中,所述候选消息传递系统实例被配置为:
确定存在到所述本地连接器的可用websocket连接;以及
识别建立了所述websocket连接的消息传递系统实例是所述候选消息传递系统实例。
4.根据权利要求1所述的系统,其中,为了识别所述消息传递系统实例,所述消息传递系统还被配置为将所述消息提交给候选消息传递系统实例,以及
其中,所述候选消息传递系统实例被配置为:
确定存在可用于所述本地连接器的端点的websocket连接;
确定建立了所述websocket连接的消息传递系统实例不是所述候选消息传递系统;以及
将所述消息发布到标识所述websocket连接的连接标识符的发布/订阅信道。
5.根据权利要求4所述的系统,其中,所述消息传递系统实例还被配置为:
确定在所述发布/订阅信道中发布的消息标识了由所述消息传递系统实例建立的websocket连接的连接标识符;以及
经由所述发布/订阅信道接收所述消息,以传输到所述本地连接器的端点。
6.根据权利要求1所述的系统,其中,所述消息是第一消息,以及其中,所述消息传递系统实例还被配置为:
从所述本地连接器的端点接收第二消息,所述第二消息响应于所述第一消息;以及将所述第二消息传输至发起所述第一消息的调用者。
7.根据权利要求1所述的系统,其中,所述消息是第一消息,以及所述消息传递系统实例是第一消息传递系统实例,以及其中,所述多个消息传递系统实例中的第二消息传递系统实例还被配置为:
从所述本地连接器的端点接收第二消息,所述第二消息响应于所述第一消息;
将所述第二消息发布到发布/订阅信道;以及
其中,所述第一消息传递实例还被配置为:
从所述发布/订阅信道接收所述第二消息;以及
将所述第二消息传输至发起所述第一消息的调用者。
8.根据权利要求1所述的系统,其中,所述注册表包括多个条目,所述条目中的每个条目将相应的websocket连接配对至i)建立了所述相应的websocket连接的相应的消息传递系统实例,或ii)特定于所述本地连接器的相应端点的侦听器,所述侦听器由建立了所述相应的websocket连接的消息传递系统实例建立。
9.根据权利要求1所述的系统,其中,为了识别建立了与将所述消息转发到的所述本地连接器的端点的websocket连接的所述消息传递系统的消息传递系统实例,所述消息传递系统还被配置为:
识别要将所述消息传输到的本地连接器;以及
识别具有与所述本地连接器建立的一个或多个websocket连接的消息传递系统实例。
10.根据权利要求9所述的系统,其中,所述消息传递系统还被配置为:
将所述消息存储在所述消息传递系统实例的队列中;以及其中,所述消息传递系统实例还被配置为:
从所述队列中检索所述消息;以及
在经由所述websocket连接将所述消息传输到所述端点之前,从与所述本地连接器的端点建立的websocket连接池中识别可用的websocket连接。
11.一种用于经由websocket连接提供消息的方法,包括:
由消息传递系统经由所述消息传递系统的多个消息传递系统实例在第一网络上维持在多个本地连接器中的每一个与所述多个消息传递系统实例中的每一个之间的多个持久的websocket连接;
由所述消息传递系统接收要发送到所述多个本地连接器中的本地连接器的第二网络上的端点的消息;
由所述消息传递系统经由将本地连接器端点与消息传递实例相关联的注册表,来识别所述多个消息传递系统实例中将所述消息发送到所述端点所经由的消息传递系统实例,所述消息传递系统实例维持到与所述端点通信的所述本地连接器的websocket连接;以及由所述消息传递系统经由到所述本地连接器的websocket连接将所述消息传输到所述端点。
12.根据权利要求11所述的方法,还包括由所述消息传递系统实例建立到所述本地连接器的所述websocket连接,其中,建立所述websocket连接包括在发布/订阅信道中创建订阅,所述订阅标识连接标识符,所述连接标识符识别所述websocket连接。
13.根据权利要求11所述的方法,其中,由所述消息传递系统识别建立了到所述本地连接器的所述websocket连接的所述消息传递系统的所述消息传递系统实例包括:
将所述消息提交给候选消息传递系统实例;
由所述候选消息传递系统实例确定存在到所述本地连接器的可用websocket连接;以及
由所述候选消息传递系统实例识别建立了所述websocket连接的消息传递系统实例是所述候选消息传递系统实例。
14.根据权利要求11所述的方法,其中,由所述消息传递系统识别建立了与将所述消息转发到的本地连接器的端点的websocket连接的消息传递系统的消息传递系统实例包括:
将所述消息提交给候选消息传递系统实例;
由所述候选消息传递系统实例确定存在可用于所述本地连接器的端点的websocket连接;
由所述候选消息传递系统实例确定建立了所述websocket连接的消息传递系统实例不是所述候选消息传递系统;以及
由所述候选消息传递系统实例将所述消息发布到标识所述websocket连接的连接标识符的发布/订阅信道。
15.根据权利要求14所述的方法,其中,建立了到所述本地连接器的端点的websocket连接的消息传递系统实例包括:
由所述消息传递系统实例确定在所述发布/订阅信道中发布的消息标识由所述消息传递系统实例建立的websocket连接的连接标识符;以及
由所述消息传递系统实例经由所述发布/订阅信道接收所述消息,以传输到所述本地连接器的端点。
16.根据权利要求11所述的方法,其中,所述消息是第一消息,以及其中,所述方法还包括:
由所述消息传递系统实例从所述本地连接器的端点接收第二消息,所述第二消息响应于所述第一消息;以及
由所述消息传递系统实例将所述第二消息传输至发起所述第一消息的调用者。
17.根据权利要求11所述的方法,其中,所述消息是第一消息,以及其中,所述方法还包括:
由第二消息传递系统实例从所述本地连接器的端点接收第二消息,所述第二消息响应于所述第一消息;
由所述第二消息传递实例将所述第二消息发布到发布/订阅信道;
由所述消息传递系统实例从所述发布/订阅信道接收所述第二消息;以及由所述消息传递系统实例将所述第二消息传输至发起所述第一消息的调用者。
18.根据权利要求11所述的方法,其中,所述注册表包括多个条目,所述条目中的每个条目将相应的websocket连接配对至i)建立了所述相应的websocket连接的相应的消息传递系统实例,或ii)特定于所述本地连接器的相应端点的侦听器,所述侦听器由建立了所述相应的websocket连接的消息传递系统实例建立。
19.根据权利要求11所述的方法,其中,由所述消息传递系统识别建立了与将所述消息转发到的本地连接器的端点的websocket连接的消息传递系统的消息传递系统实例包括:
由所述消息传递系统识别要将所述消息传输至的本地连接器;以及
由所述消息传递系统识别具有与所述本地连接器建立的一个或多个websocket连接的消息传递系统实例。
20.根据权利要求19所述的方法,还包括:
由所述消息传递系统将所述消息存储在所述消息传递系统实例的队列中;
由所述消息传递系统实例从所述队列中检索所述消息;
由所述消息传递系统实例在经由所述websocket连接将所述消息传输到所述端点之前,从与所述本地连接器的端点建立的websocket连接池中识别可用的websocket连接。

说明书全文

实时的基于的消息传递系统

[0001] 相关专利申请的交叉引用
[0002] 本申请要求于2017年10月5日提交的名称为“REAL-TIME CLOUD-BASED MESSAGING SYSTEM”的美国非临时申请No.15/725,897的优先权和权益,其要求于2017年6月14日提交的名称为“REAL-TIME CLOUD-BASED MESSAGING SYSTEM”的美国临时申请No.62/519,809的优先权和权益,其全部内容通过引用整体并入本文。

技术领域

[0003] 本申请总体上涉及消息传递系统。特别地,本申请涉及用于经由websocket连接提供消息的系统和方法。

背景技术

[0004] 当前的基于云的消息传递系统可能缺少容错和完全可扩展的服务。例如,这样的系统可能缺少双向信道,在双向信道中服务器和客户机都可以同时发送和接收消息。另外,由于网络开销,这些系统可能遭受高延迟。此外,这样的系统可能无法支持用于网站、移动设备、台式机和服务器端应用的各种web标准,以在没有复杂的防火墙、网络或虚拟专用网(VPN)配置的情况下安全地使用消息传递功能。发明内容
[0005] 本公开描述了可用于经由websocket连接提供消息的模式。本系统和方法可以提供用于服务器端系统和本地连接器进行通信的基础设施。服务器端系统可以运行多个消息传递系统实例,以通过在每个消息传递系统实例可访问的发布/订阅信道中分发连接信息来在交换消息时实现高性能、高可用性和可扩展性。通过使用websocket连接,系统可以允许在双向通信信道中在服务器和客户机系统之间进行全双工通信。该系统还可以通过使用具有最少网络开销的持久连接来实现低延迟。此外,基础设施可以支持各种标准协议,而无需使用特殊的防火墙、网络或VPN配置来支持消息传递。
[0006] 消息传递系统的每个实例都可以被启动和初始化。在初始化过程期间,每个消息传递系统实例都可以在所有其他实例均可访问的发布/订阅信道中注册自己。该注册可以允许将来自本地连接器端点的响应消息路由到适当的消息传递系统实例。
[0007] 每个本地连接器通过向消息传递系统发出websocket连接请求来初始化自身。通过本地连接器端点的初始化,可以与服务器端消息传递服务系统建立新的websocket连接。
[0008] 消息传递系统在从本地连接器端点接收到websocket连接请求后,可以将该websocket连接请求路由到可用的消息传递系统实例之一。
[0009] 接收到消息后,消息传递系统实例可以与本地连接器端点建立websocket连接。在一些实施例中,消息传递系统实例可以通过创建内部连接标识符以供将来参考来建立websocket连接。然后,消息传递系统实例可以将websocket处理程序存储在存储器中。websocket处理程序可以包括具有连接标识符的键以及websocket处理程序和连接元数据的值。消息传递系统实例可以在高速缓存存储装置中创建侦听器注册表条目。侦听器注册表条目的创建可以指示相应的本地连接器端点具有活动的websocket连接,并且该连接标识符已分配给当前实例。然后,消息传递系统实例可以使用连接标识符在发布/订阅信道中创建订阅,以允许访问消息传递系统中的其他实例。消息传递系统实例可以启动侦听器以检测传入消息。
[0010] 当接收到要传输到本地连接器端点的消息时,消息传递系统可以将消息请求转发到维护的消息传递系统实例之一。然后,消息传递系统实例可以查询侦听器注册表,以识别是否存在可用于目标本地连接器端点的连接。消息传递系统实例可以从侦听器注册表中检索连接标识符。已经获得连接标识符之后,消息传递系统实例可以确定该连接是否被分配给当前消息传递系统实例。如果未将连接分配给当前消息传递系统实例,则消息传递系统实例可以将消息发布到发布/订阅信道,以分发给其他消息传递系统实例。通过使用消息的发布,可以识别分配了连接的消息传递系统实例。
[0011] 一旦识别了分配给该websocket连接的当前消息传递系统实例,该消息传递系统实例就可以继续处理该消息。消息传递系统实例可以为接收到的消息分配消息标识符。为了处理消息,消息传递系统实例然后可以实例化新的未决响应任务,并且可以将该任务与消息标识符一起存储。消息传递系统实例可以经由websocket连接将响应消息传输到本地连接器端点。随后,消息传递系统实例可以从本地连接器端点接收响应消息。作为响应,消息传递系统实例可以完成并且可以终止未决的任务,并且来自本地连接器端点的响应可以被返回给消息传递系统。
[0012] 另一方面,当从本地连接器端点接收到消息时,消息传递系统实例可以确定该消息是否源自当前的消息传递系统实例。如果消息的发送者是当前的消息传递系统实例,则消息传递系统实例可以处理该消息。在处理消息时,消息传递系统实例可以实例化新的未决响应任务,并且可以将任务与消息标识符一起存储。消息传递系统实例可以经由websocket连接将响应消息传输到本地连接器端点。然后,消息传递系统实例可以完成并可以终止未决的任务,并且来自本地连接器端点的响应可以被返回给消息传递系统。相反,如果消息的发送者是另一个实例,则消息传递系统实例可以将消息发布到发布/订阅信道,以分发给其他消息传递系统实例。通过使用消息的发布,可以识别分配了连接的消息系统实例。然后,标识符实例可以经由相应的websocket连接将消息发送到本地连接器端点。
[0013] 另外,该基础设施可以附加地或替代地经由队列服务提供通信,其中消息请求和响应可以经由传入和传出队列进行交换。通过使用端点和实例注册表,可以存储每个消息传递系统实例的状态,以识别转发消息的正确连接处理程序。此外,消息传递系统可以将用于大型溢出消息的有效载荷存储在存储装置中。通过使用websocket池管理此类连接,基础设施还可以允许长期连接。此外,基础设施可以允许本地中心处的多个租户传送消息。
[0014] 对于传出流,消息传递系统可以维护用于与特定端点进行通信的请求的队列。消息传递系统可以接收请求,并可以通过访问高速缓存存储装置来识别包含与指定端点的直接websocket连接的连接处理程序实例。消息传递应用接口的实例(例如,RESTful API)可以经由服务总线将消息提交给所识别的连接处理程序实例。一旦从传出流队列中接收到新消息,连接处理程序随后便可以获取到目标连接器端点的连接。当连接变为可用时,该消息然后可以被转发到目标端点。
[0015] 相反,对于传入流,目标端点可以经由建立连接将回复发送回连接处理程序。然后,连接处理程序可以将响应转发到请求发起方。一旦从传入流队列中接收到新消息,连接处理程序就可以通过识别响应所源自的相应请求来回复消息传递系统。
[0016] 为了处理websocket连接,端点可以通过请求与消息传递系统建立websocket连接来指示该端点可用于通信。随着握手的完成,可以在端点的连接池中包括消息传递系统实例,以用于传入的通信请求。另外,连接处理程序可以使用消费者/生产者模式来同步对端点连接的访问。为此,连接处理程序可能会消耗来自连接池的连接,并且可能要等待直到另一个连接可用于特定端点为止。在完成消息的传输之后或在建立了来自端点的新连接时,连接处理程序还可在连接池中产生连接。
[0017] 本公开的至少一个方面涉及一种用于经由websocket连接提供消息的系统。消息传递系统可以包括多个消息传递系统实例。消息传递系统可以经由消息传递系统的多个消息传递系统实例在第一网络上维持在多个本地连接器中的每个与多个消息传递系统实例中的每个之间的多个持久的websocket连接。消息传递系统可以接收要发送到多个本地连接器中的本地连接器的第二网络上的端点的消息。消息传递系统可以经由将本地连接器端点与消息传递实例相关联的注册表来识别多个消息传递系统实例中将消息发送到端点所经由的消息传递系统实例。消息传递系统实例可以维持到与端点进行通信的本地连接器的websocket连接。消息传递系统实例可以经由到本地连接器的websocket连接将消息传输到端点。
[0018] 在一些实施例中,消息传递实例可以与本地连接器建立websocket连接。在一些实施例中,消息传递实例可以在发布/订阅信道中创建订阅。订阅可以标识连接标识符,该连接标识符识别websocket连接。
[0019] 在一些实施例中,消息传递系统可以将消息提交给候选消息传递系统实例。在一些实施例中,候选消息传递系统实例可以确定存在到本地连接器的可用websocket连接。在一些实施例中,候选消息传递系统实例可以识别出建立websocket连接的消息传递系统实例是候选消息传递系统实例。
[0020] 在一些实施例中,消息传递系统可以将消息提交给候选消息传递系统实例。在一些实施例中,候选消息传递系统实例可以确定存在可用于本地连接器的端点的websocket连接。在一些实施例中,候选消息传递系统实例可以确定建立了websocket连接的消息传递系统实例不是候选消息传递系统。在一些实施例中,候选消息传递系统实例可以将消息发布到标识websocket连接的连接标识符的发布/订阅信道。
[0021] 在一些实施例中,消息传递系统实例可以确定在发布/订阅信道中发布的消息标识由消息传递系统实例建立的websocket连接的连接标识符。在一些实施例中,消息传递系统实例可以经由发布/订阅信道接收消息,以传输到本地连接器的端点。
[0022] 在一些实施例中,消息可以是第一消息。在一些实施例中,消息传递系统实例可以从本地连接器的端点接收第二消息。第二消息可以响应于第一消息。在一些实施例中,消息传递系统实例可以将第二消息传输到发起第一消息的调用者。
[0023] 在一些实施例中,消息可以是第一消息。在一些实施例中,消息传递系统实例可以是第一消息传递系统实例。在一些实施例中,多个消息传递系统实例中的第二消息传递系统实例可以从本地连接器的端点接收第二消息。第二消息可以响应于第一消息。在一些实施例中,第二消息传递系统实例可以将第二消息发布到发布/订阅信道。在一些实施例中,第一消息传递实例可以从发布/订阅信道接收第二消息。在一些实施例中,第一消息传递实例可以将第二消息传输到发起第一消息的调用者。
[0024] 在一些实施例中,注册表可以包括多个条目。条目中的每个条目可以将相应的websocket连接配对至i)建立相应的websocket连接的相应消息传递系统实例,或ii)特定于本地连接器的相应端点的侦听器。可以由建立相应websocket连接的消息传递系统实例来建立侦听器。
[0025] 在一些实施例中,为了识别建立了与要向其转发消息的本地连接器的端点的websocket连接的消息传递系统的消息传递系统实例,消息传递系统可以识别要向其传输消息的本地连接器。在一些实施例中,消息传递系统可以识别消息传递系统实例,该消息传递系统实例具有与本地连接器建立的一个或多个websocket连接。
[0026] 在一些实施例中,消息传递系统可以将消息存储在消息传递系统实例的队列中。在一些实施例中,消息传递系统实例可以从队列中检索消息。在一些实施例中,消息传递系统实例可以在经由websocket连接传输消息到端点之前,从与本地连接器的端点建立的websocket连接池中识别可用的websocket连接。
[0027] 本公开的另一方面涉及一种经由websocket连接提供消息的方法。消息传递系统可以经由消息传递系统的多个消息传递系统实例在第一网络上维持在多个本地连接器中的每个与多个消息传递系统实例中的每个之间的多个持久的websocket连接。消息传递系统可以接收要发送到多个本地连接器中的本地连接器的第二网络上的端点的消息。消息传递系统可以经由将本地连接器端点与消息传递实例相关联的注册表来识别多个消息传递系统实例中将消息发送到端点所经由的消息传递系统实例。消息传递系统实例可以维持到与端点通信的本地连接器的websocket连接。消息传递系统实例可以经由到本地连接器的websocket连接将消息传输到端点。
[0028] 在一些实施例中,消息传递系统实例可以建立到本地连接器的websocket连接。在一些实施例中,建立websocket连接可以包括在发布/订阅信道中创建订阅。标识连接标识符的订阅可以识别websocket连接。
[0029] 在一些实施例中,识别建立了到本地连接器的websocket连接的消息传递系统的消息传递系统实例可以包括将消息提交给候选消息传递系统实例。在一些实施例中,识别建立了到本地连接器的websocket连接的消息传递系统的消息传递系统实例可以包括由候选消息传递系统实例确定存在到本地连接器的可用的websocket连接。在一些实施例中,候选消息传递系统实例可以识别出建立了websocket连接的消息传递系统实例是候选消息传递系统实例。
[0030] 在一些实施例中,识别建立了与要向其转发消息的本地连接器的端点的websocket连接的消息传递系统的消息传递系统实例可以包括将消息提交给候选消息传递系统实例。候选消息传递系统实例可以确定存在可用于本地连接器的端点的websocket连接。候选消息传递系统实例可以确定建立了websocket连接的消息传递系统实例不是候选消息传递系统。候选消息传递系统实例可以将消息发布到标识websocket连接的连接标识符的发布/订阅信道。
[0031] 在一些实施例中,消息传递系统实例可以确定在发布/订阅信道中发布的消息识别由消息传递系统实例建立的websocket连接的连接标识符。在一些实施例中,消息传递系统实例可以经由发布/订阅信道接收消息,以传输到本地连接器的端点。
[0032] 在一些实施例中,消息可以是第一消息。第二消息传递系统实例可以从本地连接器的端点接收第二消息。第二消息可以响应于第一消息。在一些实施例中,第二消息传递实例可以将第二消息发布到发布/订阅信道。在一些实施例中,消息传递系统实例可以从发布/订阅信道接收第二消息。在一些实施例中,消息传递系统实例可以将第二消息传输到发起第一消息的调用者。
[0033] 在一些实施例中,注册表可以包括多个条目。条目中的每个条目可以将相应的websocket连接配对至i)建立了相应的websocket连接的相应消息传递系统实例,或ii)特定于本地连接器的相应端点的侦听器。可以由建立了相应websocket连接的消息传递系统实例来建立侦听器。
[0034] 在一些实施例中,识别建立了与要向其转发消息的本地连接器的端点的websocket连接的消息传递系统的消息传递系统实例可以包括:识别向其传输消息的本地连接器。在一些实施例中,识别建立了与将消息转发到的本地连接器的端点的websocket连接的消息传递系统的消息传递系统实例可以包括识别具有与本地连接器建立的一个或多个websocket连接的消息传递系统实例。
[0035] 在一些实施例中,消息传递系统可以将消息存储在消息传递系统实例的队列中。在一些实施例中,消息传递系统可以从队列中检索消息。在一些实施例中,消息传递系统可以在经由websocket连接将消息传输到端点之前,通过消息传递系统实例,从与本地连接器的端点建立的websocket连接池中识别可用的websocket连接。
附图说明
[0036] 通过参考以下结合附图的描述,本解决方案的前述和其他目的、方面、特征和优点将变得更加明显和更好地理解,其中:
[0037] 图1A-1D是计算装置的实施例的框图
[0038] 图2A是用于经由websocket连接提供消息的系统的实施例的框图;
[0039] 图2B是用于经由套接字连接来提供消息的系统的消息系统实例的实施例的框图;
[0040] 图3A-3C是用于经由websocket连接提供消息的系统的实施例的序列图;
[0041] 图4A和4B是用于在经由websocket连接提供消息的系统中使用的发布/订阅信道的实施例的框图;
[0042] 图5A和5B是用于经由websocket连接提供消息的系统的实施例的框图;以及[0043] 图6A-6C是用于经由websocket连接提供消息的方法的实施例的流程图
[0044] 图7是用于经由websocket连接提供消息的方法的实施例的流程图。
[0045] 当结合附图时,根据下面阐述的详细描述,本解决方案的特征和优点将变得更加明显,在附图中,相似的附图标记始终标识相应的元件。在附图中,相似的附图标记通常表示相同、功能相似和/或结构相似的元件。

具体实施方式

[0046] 为了阅读下文各种实施例的描述,下述对于说明书的部分以及它们各自内容的描述是有用的:
[0047] A部分描述了一种计算环境,该计算环境可用于实践本文描述的实施例;以及[0048] B部分描述了用于经由WebSocket连接提供消息的系统和方法。
[0049] A.计算环境
[0050] 在讨论设备和/或客户机的系统和方法的实施例的细节之前,讨论可以在其中部署这样的实施例的计算环境可能是有帮助的。图1A和1B描绘了用于实践下面在B部分中进一步描述的系统和装置的实施例的计算装置100的框图。如图1A和1B所示,每个计算装置100包括中央处理单元101和主存储器单元122。如图1A所示,计算装置100可以包括视觉显示装置124、键盘126和/或诸如鼠标的指示装置127。每个计算装置100还可包括附加的可选元件,例如一个或多个输入/输出装置130a-130b(通常使用附图标记130表示)、以及与中央处理单元101通信的高速缓存存储器140。
[0051] 中央处理单元101是响应并处理从主存储器单元122取出的指令的任何逻辑电路。在许多实施例中,中央处理单元由微处理器单元提供,例如:由加利福尼亚州Mountain View的Intel公司制造的微处理器单元;由韩国原的三星电子公司制造的微处理器单元;
由爱达荷州博伊西的Micron Technology公司制造的微处理器单元;由加利福尼亚州Santa Clara的Transmeta公司制造的微处理器单元;由纽约州White Plains的International Business Machines公司制造的微处理器单元;或者由加利福尼亚州Sunnyvale的Advanced Micro Devices公司制造的微处理器单元,等等。计算装置100可以基于这些处理器中的任何一种,或者是能够如此处所述方式运行的任何其它处理器。
[0052] 主存储器单元122可以是能够存储数据并允许微处理器101直接访问任何存储位置的一个或多个存储器芯片,例如静态随机存取存储器(SRAM)、突发SRAM或同步突发SRAM(BSRAM)、动态随机存取存储器(DRAM)、快速页模式DRAM(FPM DRAM)、增强型DRAM(EDRAM)、扩展数据输出RAM(EDO RAM)、扩展数据输出DRAM(EDO DRAM)、突发式扩展数据输出DRAM(BEDO DRAM)、增强型DRAM(EDRAM)、同步DRAM(SDRAM)、JEDEC SRAM、PC100 SDRAM、双数据速率SDRAM(DDR SDRAM)、增强型SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)、直接内存总线DRAM(DRDRAM)或电RAM(FRAM)。主存储器122可以基于上述存储器芯片中的任何一种,或者是能够如此处所述方式运行的任何其它可用存储器芯片。在图1A中所示的实施例中,处理器101经由系统总线150(在下面进行更详细的描述)与主存储器122进行通信。图1B描述了计算装置100的实施例,在计算装置100中,处理器经由存储器端口103直接与主存储器122通信。例如,在图1B中,主存储器122可以是DRDRAM。
[0053] 图1B描述了主处理器101经由第二总线与高速缓存存储器140直接通信的实施例,第二总线有时也称为后端总线。其他实施例中,主处理器101使用系统总线150和高速缓存存储器140通信。高速缓存存储器140通常具有比主存储器122更快的响应时间,并且通常由SRAM、BSRAM或EDRAM提供。在图1B中所示的实施例中,处理器101经由本地系统总线150与各种I/O装置130进行通信。可以使用各种不同的总线将中央处理单元101连接到任一I/O装置130,所述总线包括VESA VL总线、ISA总线、EISA总线、微通道体系结构(MCA)总线、PCI总线、PCI-X总线、PCI-Express总线或NuBus。对于I/O装置是视频显示器124的实施例而言,处理器101可以使用高级图形端口(AGP)与显示器124通信。图1B描述了主处理器101经由超传输(HyperTransport)、快速I/O或者InfiniBand直接与I/O装置130b通信的计算机100的一个实施例。图1B还描述了在其中混合本地总线和直接通信的实施例:处理器101使用本地互连总线与I/O装置130b进行通信,同时直接与I/O装置130a进行通信。
[0054] 计算装置100可以支持任何适当的安装装置116,例如CD-ROM驱动器、CD-R/RW驱动器、DVD-ROM驱动器、各种格式的磁带驱动器、USB装置、硬盘驱动器或适于安装软件和程序的任何其它装置。计算装置100还可以包括存储装置128,诸如一个或者多个硬盘驱动器或者独立磁盘冗余阵列,用于存储操作系统和其它相关软件,以及用于存储应用软件程序。或者,可以使用安装装置116的任何一种作为存储装置128。此外,操作系统和软件可从例如可引导CD的可引导介质运行,诸如 ,一种用于GNU/Linux的可引导CD,该可引导CD可自knoppix.net作为GNU/Linux分发版获得。
[0055] 此外,计算装置100可以包括通过多种连接接口到局域网(LAN)、广域网(WAN)或互联网的网络接口118,所述多种连接包括但不限于标准电话线路、LAN或WAN链路(例如802.11、T1、T3、56kb、X.25)、宽带连接(如ISDN、中继、ATM)、无线连接、或上述任意或所有连接的一些组合。网络接口118可以包括内置网络适配器、网络接口卡、PCMCIA网卡、卡总线网络适配器、无线网络适配器、USB网络适配器、调制解调器或适用于将计算装置100接口到能够通信并执行这里所说明的操作的任何类型的网络的任何其它装置。
[0056] 计算装置100中可以包括各种I/O装置130a-130n。输入装置包括键盘、鼠标、触控板、轨迹球、麦克和绘图板。输出装置包括视频显示器、扬声器、喷墨打印机、激光打印机和热升华打印机。如图1A所示,I/O装置130可以由I/O控制器123控制。I/O控制器可以控制一个或多个I/O装置,例如键盘126和指示装置127(如鼠标或光笔)。此外,I/O装置还可以为计算装置100提供存储装置128和/或安装介质116。在其他实施例中,计算装置100可以提供USB连接以接纳手持USB存储装置,例如由位于美国加利福尼亚州Los Alamitos的Twintech Industry有限公司或位于美国加利福尼亚州Milpitas的SanDisk公司生产的USB闪存驱动系列装置。
[0057] 在一些实施例中,计算装置100可以包括多个显示装置124a-124n或与其相连,这些显示装置各自可以是相同或不同的类型和/或形式。因而,任何一种I/O装置130a-130n和/或I/O控制器123可以包括任一类型和/或形式的适当的硬件、软件或硬件和软件的组合,以支持、允许或提供通过计算装置100连接和使用多个显示装置124a-124n。例如,计算装置100可以包括任何类型和/或形式的视频适配器、视频卡、驱动器和/或库,以与显示装置124a-124n接口、通信、连接或以其他方式使用显示装置。在一个实施例中,视频适配器可以包括多个连接器以与多个显示装置124a-124n接口。在其他实施例中,计算装置100可以包括多个视频适配器,每个视频适配器与显示装置124a-124n中的一个或多个连接。在一些实施例中,计算装置100的操作系统的任一部分都可以被配置用于使用多个显示器124a-124n。在其他实施例中,显示装置124a-124n中的一个或多个可以由一个或多个其它计算装置提供,诸如例如经由网络与计算装置100连接的计算装置100a和100b。这些实施例可以包括被设计和构造为将另一个计算机的显示装置用作计算装置100的第二显示装置124a的任一类型的软件。本领域的普通技术人员应认识和理解可以将计算装置100配置成具有多个显示装置124a-124n的各种方法和实施例。
[0058] 在另外的实施例中,I/O装置130可以是系统总线150和外部通信总线之间的桥170,所述外部通信总线例如USB总线、Apple桌面总线、RS-232串行连接、SCSI总线、FireWire总线、FireWire800总线、以太网总线、AppleTalk总线、千兆位以太网总线、异步传输模式总线、HIPPI总线、超级HIPPI总线、SerialPlus总线、SCI/LAMP总线、光纤通道总线或串行连接小型计算机系统接口总线。
[0059] 图1A和1B中描述的那类计算装置100通常在控制任务的调度和对系统资源的访问的操作系统的控制下操作。计算装置100可以运行任何操作系统,如 Windows操作系统,不同发行版本的Unix和Linux操作系统,用于Macintosh计算机的任何版本的MAC,任何嵌入式操作系统,任何实时操作系统,任何开源操作系统,任何专有操作系统,任何用于移动计算装置的操作系统,或者任何其它能够在计算装置上运行并完成这里所述操作的操作系统。典型的操作系统包括:WINDOWS 3.x、WINDOWS 95、WINDOWS 98、WINDOWS 2000、WINDOWS NT 3.51、WINDOWS NT 4.0、WINDOWS CE、WINDOWS XP、WINDOWS 7和WINDOWS 
10,所有这些均由位于华盛顿州Redmond的微软公司出品;由位于加利福尼亚州Cupertino的苹果计算机出品的MacOS;由位于纽约州Armonk的国际商业机器公司出品的OS/2;以及由位于犹他州Salt Lake City的Caldera公司发布的可免费使用的操作系统Linux,或者任何类型和/或形式的Unix操作系统,以及其它。
[0060] 在其他的实施例中,计算装置100可以具有符合该装置的不同的处理器、操作系统和输入装置。例如,在一个实施例中,计算机100可以是智能手机或平板电脑,诸如由苹果公司,由三星电子,由小米公司或由Google公司开发的那些,以及其它。在该实施例中,智能手机或平板电脑可以在操作系统(例如Android或iOS)的控制下操作,并且可以包括触针输入装置以及触敏屏幕。此外,计算装置100可以是任何工作站、桌面计算机、膝上型或笔记本计算机、服务器、手持计算机、移动电话、任何其它计算机、或能够通信并有足够的处理器能和存储容量以执行此处所述的操作的其它形式的计算或者电信装置。
[0061] 如图1C所示,计算装置100可以包括多个处理器,并且可以提供用于对不只一个数据片同时执行多个指令或者同时执行一个指令的功能。在一些实施例中,计算装置100可包括具有一个或多个核的并行处理器。在这些实施例的一个中,计算装置100是共享存储器并行装置,具有多个处理器和/或多个处理器核,将所有可用存储器作为单个全局地址空间进行访问。在这些实施例的又一个中,计算装置100是分布式存储器并行装置,具有多个处理器,每个处理器仅访问本地存储器。在这些实施例的又一个中,计算装置100既有共享的存储器又有仅由特定处理器或处理器子集访问的存储器。在这些实施例的又一个中,如多核微处理器的计算装置100将两个或更多独立处理器组合在单个封装中,通常在单个集成电路(IC)中。在这些实施例的又一个中,计算装置100包括具有单元宽带引擎(CELL BROADBAND ENGINE)架构并包括高能处理器元件以及多个协同处理元件的芯片,高能处理器元件和多个协同处理元件通过内部高速总线连接在一起,可以将内部高速总线称为元件互连总线。
[0062] 在一些实施例中,处理器提供用于对多个数据片同时执行单个指令(SIMD)的功能。在其他实施例中,处理器提供用于对多个数据片同时执行多个指令(MIMD)的功能。又一个实施例中,处理器可以在单个装置中使用SIMD和MIMD核的任意组合。
[0063] 在一些实施例中,计算装置100可包括图形处理单元。在图1D所示的这些实施例的一个中,计算装置100包括至少一个中央处理单元101和至少一个图形处理单元。在这些实施例的又一个中,计算装置100包括至少一个并行处理单元和至少一个图形处理单元。在这些实施例的又一个中,计算装置100包括任意类型的多个处理单元,多个处理单元中的一个包括图形处理单元。
[0064] 在一些实施例中,第一计算装置100a代表客户端计算装置100b的用户执行应用。在又一个实施例中,计算装置100a执行虚拟机,其提供执行会话,在该会话中,代表用户或客户端计算装置100b执行应用。在这些实施例的一个中,执行会话是托管的桌面会话。在这些实施例的又一个中,计算装置100执行终端服务会话。终端服务会话可以提供托管的桌面环境。在这些实施例的又一个中,执行会话提供对计算环境的访问,该计算环境可包括以下的一个或多个:应用、多个应用、桌面应用以及可执行一个或多个应用的桌面会话。
[0065] B.经由Websocket连接提供消息
[0066] 本公开描述了可用于经由websocket连接提供消息的模式。本系统和方法可以提供用于服务器端系统和本地连接器进行通信的基础设施。服务器端系统可以运行多个消息传递系统实例,以通过在每个消息传递系统实例可访问的发布/订阅信道中分发连接信息来在交换消息时实现高性能、高可用性和可扩展性。Websocket可以是计算机网络通信协议,其可以通过多个装置之间的单个传输控制协议(TCP)连接提供全双工通信通道。为了建立websocket连接,客户机可以向服务器(例如,在云计算系统上)发送握手请求。服务器可以依次返回握手响应。握手可能类似于HTTP,它允许客户机和服务器在同一网络端口上处理HTTP连接和websocket连接。一旦建立了websocket连接,客户机和服务器即可使用双向二进制协议进行通信。客户机和服务器还可以以全双工模式交换websocket数据或文本框架
[0067] 消息传递系统的每个实例都可以被启动和初始化。在初始化过程期间,每个消息传递系统实例都可以在所有其他实例均可访问的发布/订阅信道中注册自己。该注册可以允许将源自本地连接器端点的响应消息路由到适当的消息传递系统实例。
[0068] 每个本地连接器通过向消息传递系统发出websocket连接请求来初始化自身。通过本地连接器端点的初始化,可以与服务器端消息传递服务系统建立新的websocket连接。
[0069] 消息传递系统在从本地连接器端点接收到websocket连接请求后,可以将websocket连接请求路由到可用的消息传递系统实例之一。
[0070] 接收到消息后,消息传递系统实例可以与本地连接器端点建立websocket连接。在一些实施例中,消息传递系统实例可以通过创建内部连接标识符以供将来参考来建立websocket连接。然后,消息传递系统实例可以将websocket处理程序存储在存储器中。websocket处理程序可以包括具有连接标识符的键以及websocket处理程序和连接元数据的值。消息传递系统实例可以在高速缓存存储装置中创建侦听器注册表条目。侦听器注册表条目的创建可以指示相应的本地连接器端点具有活动的Websocket连接,并且该连接标识符被分配给当前实例。然后,消息传递系统实例可以使用连接标识符在发布/订阅信道中创建订阅,以允许访问消息传递系统中的其他实例。消息传递系统实例可以启动侦听器以检测传入消息。
[0071] 当接收到要传输到本地连接器端点的消息时,消息传递系统可以将消息请求转发到消息传递系统实例之一。然后,消息传递系统实例可以查询侦听器注册表,以识别是否存在可用于目标本地连接器端点的Websocket连接。消息传递系统实例可以从侦听器注册表中检索连接标识符。已经获得连接标识符之后,消息传递系统实例可以确定该连接是否被分配给当前消息传递系统实例。如果未将连接分配给当前消息传递系统实例,则消息传递系统实例可以将消息发布到发布/订阅信道,以分发给其他消息传递系统实例。使用消息的发布,可以识别分配了连接的消息传递系统实例。
[0072] 一旦识别了分配给该连接的当前消息传递系统实例,该消息传递系统实例就可以继续处理该消息。消息传递系统实例可以为接收到的消息分配消息标识符。为了处理消息,消息传递系统实例然后可以实例化新的未决响应任务,并且可以将该任务与消息标识符一起存储。消息传递系统实例可以经由websocket连接将响应消息传输到本地连接器端点。随后,消息传递系统实例可以从本地连接器端点接收响应消息。作为响应,消息传递系统实例可以完成并可以终止未决的任务,并且来自本地连接器端点的响应可以返回给消息传递系统。
[0073] 另一方面,当接收到来自本地连接器端点的消息时,消息传递系统实例可以确定该消息是否源自当前实例。如果消息的发送者是当前实例,则消息传递系统实例可以处理该消息。在处理消息时,消息传递系统实例可以实例化新的未决响应任务,并且可以将该任务与消息标识符一起存储。消息传递系统实例可以经由websocket连接将响应消息传输到本地连接器端点。然后,消息传递系统实例可以完成并可以终止未决的任务,并且来自本地连接器端点的响应可以返回给消息传递系统。相反,如果消息的发送者是另一个实例,则消息传递系统实例可以将消息发布到发布/订阅信道,以分发给其他消息传递系统实例。使用消息的发布,可以识别分配了连接的消息传递系统实例。然后,消息传递系统实例可以经由相应的websocket连接将消息发送到本地连接器端点。
[0074] 现在参考图2A,描绘了用于经由websocket连接提供消息的系统200的实施例的框图。简而言之,系统200可以包括消息传递系统205和本地中心210。消息传递系统205可以是使用一个或多个通信网络进行操作的云计算系统。消息传递系统205可以包括一个或多个消息传递系统实例225a-n、高速缓存存储装置235和负载平衡服务器240。本地中心210可以包括一个或多个本地连接器220a-n、以及一个或多个客户机215a-n。在一个或多个实施例中,上述元件或实体中的每一个以硬件或硬件和软件的组合来实现。系统200的每个组件可以使用以上结合图1A-1D详述的硬件或硬件或软件的组合来实现。例如,这些元件或实体中的每一个可以包括在消息传递系统205和本地中心210的硬件上执行的任何应用、程序、库、脚本、任务、服务、过程或任何类型和形式的可执行指令。在一个或多个实施例中,硬件包括诸如一个或多个处理器的电路。
[0075] 更详细地,消息传递系统205的负载平衡服务器240可以管理消息传递系统205与本地中心210之间的通信。消息传递系统205的负载平衡服务器240可以维护、监视、访问多个消息传递系统实例225a-n或与之通信。每个消息传递系统实例225a-n可以用于维持本地中心210的一个或多个连接器220a-n之间的持久websocket连接,多个客户机215a-n中的一个或多个经由该连接。在一些实施例中,可以在诸如基于云的网络205的第一通信网络上运行的服务器上初始化消息传递系统实例225a-n。每个连接器225a-n可以用于管理本地中心210处的客户机215a-n(在某些情况下,客户机可以是用户、租户或其他实体)的子集的通信。在由多个连接器220a-n服务的本地中心210处,可以存在多个客户机215a-n的子集。在一些实施例中,在本地中心210处的多个连接器220a-n与端点(例如,一个或多个实体,例如客户机215a-n)之间可能存在单独的网络。
[0076] 现在参考图2B,描绘了用于经由websocket连接提供消息的系统200的实例之一225a的实施例的框图。实例225a可以包括连接启动器250、连接标识符生成器255、注册表条目生成器260、订阅发布器265、websocket侦听器270、注册表条目比较器275、消息处理程序
280和队列接口285,以及其他。所有其他实例225b-n可以具有与实例225a相同的组件的实例。在一个或多个实施例中,实例225a的每个组件以硬件或硬件和软件的组合来实现。
[0077] 每个消息传递系统实例225a-n可以由消息传递系统205(例如,负载平衡服务器240或连接到消息传递系统205的基于云的网络的另一装置)初始化。在初始化后,连接启动器250可以与在本地中心210处的连接器220a-n中的一个建立websocket连接。该websocket连接可以根据websocket协议,其可以通过多个装置之间的单个传输控制协议(TCP)连接提供全双工通信通道。在初始化过程期间,每个消息传递系统实例的连接启动器250可以在所有其他实例225a-n可以访问的发布/订阅信道中注册相应的实例225a-n。在一些实施例中,注册可以包括用于存储在发布/订阅信道中的实例标识符。该注册可以允许源自连接器
220a-n的响应消息被路由到适当的消息传递系统实例225a-n。为了建立websocket连接,连接启动器250可以从连接器220a-n之一接收握手请求,并且可以与连接器220a-n执行握手过程。一旦建立了websocket连接,实例225a-n就可以使用双向二进制协议与连接器220a-n进行通信。
[0078] 消息传递系统实例225a-n的连接标识符生成器255可以生成相应的连接器220a-n与消息传递系统205之间的持久websocket连接的连接标识符。连接标识符可以是用于唯一标识连接器220a-n与消息传递系统205之间的websocket连接的数字或字母数字值,并且可以基于与各个消息传递系统实例225a-n对应的消息传递系统实例标识符来生成。通过使用该连接标识符,每个消息传递系统实例225a-n的连接标识符生成器255可以将连接器220a-n和消息传递系统实例225之间的连接添加到负载平衡服务器240或高速缓存存储装置235的数据库或消息传递系统205的某些其他实体。
[0079] 每个消息传递系统实例225a-n的订阅发布器260也可以使用连接标识符在发布/订阅信道中创建订阅。在一些实施例中,可以在高速缓存存储装置235中或在负载平衡服务器240处维护发布/订阅信道。订阅可以包括用于本地中心210的各个连接器220a-n和消息传递系统205之间的websocket连接的连接标识符。订阅可以被其他消息传递系统实例225a-n的订阅发布器260访问,并可以指定将将来的通信转发到哪个实例225a-n。订阅的示例可以包括:
[0080]
[0081]
[0082] 为了管理持久的websocket连接,每个消息传递系统实例225a-n的注册表条目生成器265可以在高速缓存存储装置235处维护的注册表中创建侦听器注册表条目。侦听器注册表条目可以包括连接标识符、websocket处理程序和连接元数据等。侦听器注册表条目可以标识本地中心210处的连接器220a-n。在一些实施例中,侦听器注册表条目可以包括与特定于相应连接器220a-n的端点(例如,一个或多个客户机215a-n)的侦听器的持久的websocket连接的配对。侦听器注册表条目的创建可以指示相应的本地连接器端点具有活动的websocket连接,并且连接标识符被分配给当前实例。
[0083] 在一些实施例中,侦听器注册表条目可以包括到相应消息传递系统实例225a-n的持久websocket连接的配对。侦听器注册表条目可以指示将持久websocket连接分配给了相应的消息传递系统实例225a-n。侦听器注册表条目的示例可以包括:
[0084]
[0085] 实例225a-n还可以为持久的websocket连接建立websocket侦听器270。websocket侦听器270可以检测到持久连接的传入通信。随后,消息传递系统205可以接收将从消息传递系统205发送到本地中心210的消息。该消息可以被定向到连接器220a-n的另一网络上的端点(例如,一个或多个客户机215a-n)。在一些实施例中,消息可以包括源端点(例如,客户机215a-n之一)、目标端点(例如,一个或多个其他客户机215a-n)以及消息体等等。在一些实施例中,实例225a-n之一的websocket侦听器270可以检测要发送到本地中心210的连接器220a-n的传入消息。
[0086] 在接收到消息之后,负载平衡服务器240可以经由侦听器注册表来识别将消息定向到的候选消息传递系统实例225a-n。响应于该识别,负载平衡服务器240可以将消息转发或提交给候选消息传递系统实例225a-n。候选消息传递系统实例225a-n可以与最初为服务由消息所指示的端点的连接器220a-n建立websocket连接的实例不同。
[0087] 收到消息后,候选消息传递系统实例225a-n的注册表条目比较器275可以确定存在与消息所指示的端点的相应连接器220a-n的可用websocket连接。如果存在可用的websocket连接,则候选消息传递系统实例225a-n的注册表条目比较器275可以确定候选消息传递系统实例225a-n是否是建立了websocket连接的消息传递系统实例225a-n。在一些实施例中,候选消息传递系统实例225a-n的注册表条目比较器275可以访问负载平衡服务器240或高速缓存存储装置235处的注册表,以标识侦听器注册表条目。在一些实施例中,候选消息传递系统实例225a-n的注册表条目比较器275可以通过识别到连接器220a-n的端点的连接是否被分配给候选消息传递系统实例225a-n,从侦听器注册表条目来确定候选消息传递系统实例225a-n是否是建立了websocket连接的实例。在一些实施例中,可以使用在侦听器注册表条目中指示的连接标识符来执行识别。在一些实施例中,候选消息传递系统实例225a-n的注册表条目比较器275可以将与连接标识符相关联的websocket标识符与对应于候选消息传递系统实例225a-n的websocket标识符进行比较,以确定是否存在匹配。如果将websocket连接分配给候选消息传递系统实例225a-n,则候选消息传递系统实例225a-n的注册表条目比较器275可以确定候选消息传递系统实例225a-n是建立了websocket连接的实例。相反,如果未将websocket连接分配给候选消息传递系统实例225a-n,则候选消息传递系统实例225a-n的注册表条目比较器275可以确定候选消息传递系统实例225a-n不是建立了websocket连接的实例。
[0088] 如果候选消息传递系统实例225a-n不是建立了websocket连接的消息传递系统实例225a-n,则候选消息传递系统实例225a-n的订阅发布器260可以将消息发布或分发到由负载平衡服务器240维护的发布/订阅信道上。在一些实施例中,候选消息传递系统实例225a-n的订阅发布器260可以从侦听器注册表中提取连接标识符,并且可以发布具有连接标识符的消息。在接收到消息之后,负载平衡服务器240(或消息传递系统205的另一个装置)可以确定在发布/订阅信道中发布的消息是否标识了用于连接器220a-n的端点的websocket连接的连接标识符。在一些实施例中,负载平衡服务器240可以从侦听器注册表中识别连接标识符。在一些实施例中,负载平衡服务器240可以从消息的连接标识符中识别出要将消息转发到的另一个消息传递系统实例225a-n。新识别的消息传递系统实例225a-n可以是最初建立websocket连接的实例。在一些实施例中,负载平衡服务器240可以识别消息发往的连接器220a-n。一旦被识别,负载平衡服务器240可以将消息提交或转发给所识别的最初建立了websocket连接的消息传递系统实例225a-n。
[0089] 一旦新识别了websocket 225a-n,或者如果候选消息传递系统实例225a-n是建立了websocket连接的消息传递系统实例225a-n,则消息传递系统实例225a-n的消息处理程序280可以继续经由websocket连接将消息传输到该消息指定的端点的连接器220a-n。以这种方式,由于所识别的消息传递系统实例225a-n是建立websocket连接的实例,因此消息传递系统205可以维持与本地中心210的连接器220a-n的持久通信。消息传递系统实例225a-n的消息处理程序280可以为要发送到指定端点的连接器220a-n的消息分配消息标识符。消息标识符可以由消息传递系统实例225a-n基于连接标识符、时间戳、源端点和目标端点等生成。消息传递系统实例225a-n的消息处理程序280可以创建新的未决响应任务,以处理和发送消息。新的未决响应任务可以是异步任务。一旦创建,消息传递系统实例225a-n的消息处理程序280可以经由websocket连接将消息提交或发送到连接器220a-n。消息传递系统实例225a-n的消息处理程序280然后可以等待经由websocket连接来自连接器220a-n的回复或确认消息。一旦接收到,消息传递系统实例225a-n的消息处理程序280就可以终止或完成响应任务。消息传递系统实例225a-n的消息处理程序280可以另外发送回调响应到端点(例如,客户机215a-n)。
[0090] 负载平衡服务器214或消息传递系统实例225a-n中的一个也可以接收要从本地中心210发送的另一消息。该消息可以源自在连接器220a-n的另一个网络上的端点(例如,一个或多个客户机215a-n),并且可以指向消息传递系统实例220a-n中的一个。在一些实施例中,该消息可能已经响应于先前的消息而被发送。接收消息传递系统实例225a-n的消息处理程序280可以识别发起先前消息的调用者(例如,消息传递系统实例225a-n之一)。接收消息传递系统实例225a-n的消息处理程序280可以确定先前消息的调用者是对应于接收消息传递系统实例225a-n还是另一个消息传递系统实例225a-n。如果调用者对应于接收消息传递系统实例225a-n,则接收消息传递系统实例225a-n的消息处理程序280可以经由websocket连接将后续消息发送到连接器220a-n。
[0091] 另一方面,如果调用者不对应于接收消息传递系统实例225a-n,则接收消息传递系统实例225a-n的消息处理程序280可以将消息发布或分发到由负载平衡服务器240所维护的发布/订阅信道上。在一些实施例中,接收消息传递系统实例225a-n的消息处理程序280可以从侦听器注册表中提取连接标识符,并且可以发布具有连接标识符的消息。在接收到消息之后,负载平衡服务器240可以确定在发布/订阅信道中发布的消息是否标识了用于连接器220a-n的端点的websocket连接的连接标识符。以这种方式,负载平衡服务器240可以识别先前消息的调用者。在一些实施例中,负载平衡服务器240可以从侦听器注册表中识别连接标识符。在一些实施例中,负载平衡服务器240可以从消息的连接标识符中识别出要将消息转发到的另一个消息传递系统实例225a-n。新识别的消息传递系统实例225a-n可以是最初建立websocket连接的实例。在一些实施例中,负载平衡服务器240可以识别消息发往的连接器220a-n。一旦被识别,负载平衡服务器240可以将消息提交或转发给所识别的最初建立了websocket连接的消息传递系统实例225a-n。然后可以将消息转发或提交给所识别的消息传递系统实例225a-n。
[0092] 现在参考图3A-3C,描绘了用于经由websocket连接提供消息的系统的序列300A-300C的实施例的序列图。从图3A开始,序列300A示出了以下情形:在该情形下,第一实例
225a被分配了与本地中心210的连接器220的连接。总而言之,第一实例225a可以初始化(302),并且可以通过将消息发送到服务器240来订阅自身(例如“Subscribe(messaging:
instance:InstanceA:recv)”)(304)。第二实例225b也可以初始化(306)并且可以通过向服务器240发送消息来订阅自身(例如,“Subscribe(messaging:instance:InstanceB:
recv)”)(308)。第二实例225b可以与本地中心210的连接器220执行握手(310)。
[0093] 一旦握手完成,连接器220可以发送消息以添加连接(312)。在接收到之后,第二实例225b可以发送具有用于与连接器220的连接的连接标识符的另一订阅消息(例如,“Subscribe(messaging:conn:send’)(314)。第二实例225b然后可以通过发送另一个消息来将连接添加至服务器240(例如,“AddConnection(messaging:instance::conn,connectionid123)”)(316)。第二实例225b还可以通过发送另一个消息将侦听器注册表条目添加到在服务器240处维护的数据库中(例如,“AddListener(Key:messaging:listener:,value:)”)(318)。随后,第一实例225a可以从本地中心210处的客户机215接收消息(例如,“SendMessage(Customer,Endpoint,Payload)”)(320)。第一实例225a随后可以访问服务器240以检索连接标识符(例如,“GetRandomConnectionId(messaging:listen::)”)(322)。第一实例225a可以发起异步任务(324)。
[0094] 如果将连接分配给第一实例225a,则第一实例225a可以继续将消息直接发送到在消息中指示的连接器220。第一实例225a可以向本地中心210处的连接器220发送消息(例如,“SendMessage(message)”)(326)。第一实例225a可以继而从连接器220接收回复消息(例如,“Reply(message”))。响应于接收,第一实例225a可以终止或完成异步任务(330),并且可以将回调响应(例如,“Callback(response)”)发送到客户机215(332)。
[0095] 现在参考图3B,序列300B示出了没有为第一实例225a分配与本地中心210的连接器220的连接的情况。在第一实例225a发起异步任务(324)之后,序列300B有所不同。如果未将连接分配给第一实例225a,则第一实例225a可以将消息发布到在服务器240处维护的发布/订阅信道(例如,“Publish(messaging:conn::send,message)”)(334)。服务器240可以将第二实例225b识别为已经被分配了与本地中心220的连接器220的连接。服务器240可以将该消息转发给第二实例225b(例如,“OnNewMessage(messaging:conn::send,message)”)(336)。第二实例225b可以经由先前建立的websocket连接将消息发送至连接器220(例如,“SendMessage(message)”)(338)。第二实例
225b继而可以接收到回复消息(例如,“Reply(message”))(340)。第二实例225b可以将接收到的回复消息发布到服务器240处维护的发布/订阅信道上(例如,“Publish(messaging:
instance:InstanceA:recv,response)”)(342)。服务器可以继而将消息转发到第一实例(例如,“OnNewMessage(messaging:instance:recv,response)”)(344)。序列330B的其余部分可以类似于序列330A。
[0096] 现在参考图3C,序列300C示出了第一实例225a和第二实例225b(或任何其他实例225c-n)都未与本地中心210的连接器220建立连接的情形。在试图从服务器240检索连接标识符(322)之后,第一实例225a可以确定不存在用于连接器220与消息传递系统实例225a-n中的任何一个的连接的连接标识符。响应于该确定,第一实例225a可以向客户机215发送错误消息(例如,“Error(‘no listeners for endpoint’)”或“Error(‘orphan connection’)”)(346)。
[0097] 现在参考图4A和图4B,描绘了用于在经由websocket连接提供消息的系统中使用的发布/订阅信道的实施例的框图。在图4A和4B中,第一实例225a可以是正在发布的实例,而第二实例225b可以是正在订阅的实例。在图4A中,示出了接收信道400a的情形。在这种情况下,发布/订阅信道405可以包括具有参数(例如,“messaging:instance:instance:recv”)的信道410,该参数指示第二实例225b对发布的接收。在图4B中,示出了发送信道
400b的情形。在这种情况下,发布/订阅信道405可以包括具有参数(例如,“messaging:
conn::send”)的信道410’,该参数指示第一实例225b的发布的分发。
[0098] 另外,该基础设施可以附加地或可替代地经由队列服务来提供通信,其中消息请求和响应可以经由传入和传出队列来交换。通过使用端点和实例注册表,可以存储每个消息传递系统实例的状态,以识别转发消息的适当连接处理程序。此外,消息传递系统可以将用于大型溢出消息的有效载荷存储在存储装置中。通过使用websocket池管理此类连接,基础设施还可以允许长期连接。此外,基础设施可以允许本地中心的多个租户传送消息。
[0099] 对于传出流,消息传递系统可以维护用于与端点通信的多个请求队列。可以为每个实例分配其自己的队列,以使该队列特定于消息传递实例。消息传递系统可以接收请求,并可以通过访问高速缓存存储装置来识别包含与指定端点的直接websocket连接的连接处理程序实例。消息传递应用接口(例如,RESTful API)的消息传递应用实例可以经由服务总线将消息提交给所识别的连接处理程序实例。一旦从传出流队列中接收到新消息,则连接处理程序便可以获取到通信地耦合到目标端点的连接器的websocket连接。当websocket连接变得可用时,该消息然后可以经由websocket连接被转发到目标端点。
[0100] 相反,对于传入流,目标端点可以经由已建立的websocket连接将回复发送回连接处理程序。然后,连接处理程序可以将响应转发到请求发起者。
[0101] 一旦从传入流队列接收到新消息(例如响应),则Restful API实例将通过识别响应所源自的相应请求来回复消息传递系统消费者(例如,接收到响应的连接处理程序实例)。
[0102] 为了处理websocket连接,端点可以通过请求与消息传递系统的websocket连接来指示该端点可用于通信。消息传递系统可以建立websocket连接。握手完成后,可以将已建立的websocket连接包括在端点的连接池中,以用于传入的通信请求。另外,连接处理程序可以使用消费者/生产者模式来同步对端点连接的访问。为此,连接处理程序可能会消耗来自连接池的连接,并且可能要等到另一个连接变为可用于特定端点为止。在完成消息的传输之后或在建立了来自端点的新连接时,连接处理程序还可在连接池中产生连接。
[0103] 现在参考图5A和5B,描绘了用于经由websocket连接提供消息的系统500的实施例的框图。系统500的组件可以是消息传递系统205的一部分,例如负载平衡服务器240或一个或多个消息传递系统实例220a-n(和队列接口285)。系统500的每个组件可以使用以上结合图1A-1D详细描述的硬件或硬件或软件的组合来实现。例如,这些元件或实体中的每一个可以包括在消息传递系统205的硬件上执行的任何应用、程序、库、脚本、任务、服务、过程或任何类型和形式的可执行指令。在一个或多个实施例中,硬件包括电路,诸如一个或多个处理器。
[0104] 从图5A开始,系统500可以包括消息传递应用编程接口(API)505、连接处理程序510、一组传出流队列520、一组传入流队列525、端点/实例注册表530以及消息溢出存储装置535。在图2的上下文中,在处理在消息传递系统205和本地中心210的连接器220a-n之间交换的消息时,每个websocket实例220a-n可以将一个或多个消息存储在使用系统500维护的队列中。每个websocket实例220a-n可以在识别到与消息所指定的连接器220a-n的端点的可用websocket连接后发送一个或多个消息。
[0105] 消息传递应用编程接口(API)505可以是Web服务,例如代表状态传输(RESTful)API,并且可以维护与上述消息传递系统实例225a-n对应的一个或多个实例225a-n。对应于消息传递API 505的一个或多个实例225a-n可以对应或镜像以上结合图2A和2B详细描述的消息传递系统实例225a-n。连接处理程序510还可以维护一个或多个实例225a-n,这些实例225a-n对应于以上结合图2A和2B详细描述的消息传递系统实例225a-n。由连接处理程序
510维护的一个或多个实例225'a-n可以对应或镜像以上结合消息传递系统205详细描述的消息传递系统实例225a-n。消息传递API 505处的每个实例225a-n可以在连接处理程序510上具有对应的实例225a-n。在一些实施例中,消息传递API 505处的每个实例225a-n可以与连接处理程序510上的对应实例225a-n接口。每个实例225a-n的队列接口285可以将消息、连接标识符和其他元数据等连接或中继到相应的接口225a-n或225a-n。
[0106] 端点/实例注册表530可以维护并包括用于由消息传递系统200的每个消息传递系统实例225a-n、消息传递API 505的每个实例225a-n、以及连接处理程序510的每个实例225a-n维持的websocket连接的连接标识符。消息传递API 505的实例225a-n可以与与消息传递系统实例225a-n相同的连接标识符相关联,以用于与相应连接器220a-n的websocket连接。连接处理程序510的实例225a-n可以与与实例225a-n相同的连接标识符相关联,以用于与相应的连接器220a-n的websocket连接。端点/实例注册表530还可以包括用于连接器
220a-n的端点的标识符。
[0107] 传出流队列520和传入流队列525可以是消息传递系统205的服务总线的一部分。传出流队列520可以包括一组队列540a-n。传入流队列525也可以包括一组队列545a-n。每个队列540a-n和545a-n可以对应于各自的实例225a-n和225a-n。传出流队列520中的每个队列540a-n可包括来自通过消息传递API 505维护的相应实例225a-n的一个或多个消息。
传入流队列525中的每个队列545a-n可包括来自通过连接处理程序510维护的相应实例
225a-n的一个或多个消息。如果队列540a-n或队列545a-n中的任何一个接收的消息多于容量,则相应的消息可被存储在消息溢出存储装置535上。消息溢出存储装置535可以存储和维护来自实例225a-n或225a-n的消息。
[0108] 当实例225a-n之一接收到定向到连接器220a-n的端点的消息时,消息传递API 505的相应实例225a-n可以将消息定向到传出流队列520的相应队列540a-n。相应的实例
225a-n可以确定消息的添加是否会使队列540a-n超出容量。如果消息的添加将使队列
540a-n超出容量,则相应的实例225a-n可以将消息添加到消息溢出存储装置535。否则,如果消息的添加将不使队列540a-n超出容量,则相应的实例225a-n可以将消息添加到相应的队列540a-n。继而,连接处理程序510的相应实例225a-n可以访问相应的队列540a-n以检索出站消息。相应的实例225a-n可以将消息转发到目标端点(例如,本地中心210处的一个或多个客户机215a-n)。
[0109] 当来自连接器220a-n的端点的消息被定向到实例225a-n之一时,连接处理程序510的相应实例225a-n可以将消息定向到传入流队列525的相应队列545a-n。相应的实例
225a-n可以确定消息的添加是否会使队列540a-n超出容量。以这种方式,消息系统205的服务总线可以服务大型消息以传输到指定端点。如果消息的添加将使队列545a-n超出容量,则相应的实例225a-n可以将消息添加到消息溢出存储装置535。否则,如果消息的添加将不会使队列545a-n超出容量,则相应的实例225a-n可以将消息添加到相应的队列540a-n。继而,消息传递API 505的相应实例225a-n可以访问相应的队列545a-n以检索入站消息。相应的实例225a-n可以将消息转发到相应的实例225a-n。相应的实例225a-n继而可以生成回复消息,并且可以识别向其发送回复消息的目标端点220a-n。可以使用以上结合传出流队列
520描述的技术将回复消息发送到连接器220a-n的端点。
[0110] 现在参考图5B,更详细地示出了连接处理程序510与websocket连接池515交换消息。websocket连接池515可以包括一个或多个套接字(socket)连接555a-n。在图2的上下文中,在处理在消息传递系统205与本地中心210的连接器220a-n之间交换的消息时,每个websocket实例220a-n可以识别消息发往的连接器220a-n。消息传递系统205可以利用与连接器220a-n建立的一个或多个websocket连接来识别websocket实例220a-n。
[0111] 更详细地,一旦由连接处理程序510的相应实例225a-n从相应队列540a中检索到消息,则连接处理程序510可以识别通过其发送消息的可用套接字连接555a-n。连接处理程序510可以识别消息指定的端点550a-n。每个端点550a-n可以与一个或多个套接字连接555a-n相关联。使用所识别的端点550a-n,连接处理程序510可以确定websocket连接池515的套接字连接555a-n中的哪一个可用。连接处理程序510可以确定每个套接字连接555a-n的状态。在一些实施例中,套接字连接555a-n可以被与来自队列540a-n的消息的连接所消耗。在一些实施例中,套接字连接555a-n可以被与用于指定端点的连接器220a-n的连接所消耗。在一些实施例中,套接字连接555a-n可以处于等待来自队列540a-n的消息或连接器
220a-n的连接。在图5C所示的示例中,用于第一套接字连接555a的连接560a可以被来自队列540的消息之一消耗。此外,用于第二套接字连接555b的连接560b可以处于等待来自队列
540的另一消息(如虚线所指示的)。最后,来自第三套接字连接555c的连接560c可以被消耗于与消息指定的端点的连接器220a-n通信。在识别了指定端点的可用套接字连接555a-n之后,连接处理程序510可以经由一个可用套接字连接555a-n将实例225a-n的消息提交或转发到消息指定的连接器220a-n。
[0112] 现在参考图6A-6C,描绘了用于经由websocket连接提供消息的方法600的实施例的流程图。方法600的操作和功能可以由以上详细描述的系统200和/或系统500执行。从图6A开始,消息传递系统可以通过在发布/订阅信道中注册每个实例来初始化每个实例(602)。消息传递系统可以从本地连接器接收websocket连接请求(604)。消息传递系统可以识别可用实例(606)。消息传递系统可以创建用于与本地连接器的连接的内部连接标识符(608)。消息传递系统可以存储用于与本地连接器的连接的websocket处理程序(610)。消息传递系统可以在高速缓存存储装置中创建侦听器注册表条目,以用于与本地连接器的活动的websocket连接(612)。消息传递系统可以在发布/订阅信道中创建订阅(614)。然后,消息传递系统可以侦听传入消息(616)。
[0113] 如果消息是到本地连接器的,则消息传递系统可以执行图6B所示的功能。转到图6B,消息传递系统可以将消息请求转发到可用实例(618)。消息传递系统可以访问侦听器注册表以识别可用于指定连接器的实例(620)。消息传递系统可以确定该连接是否被分配给另一个实例(622)。如果连接被分配给另一个实例,则消息传递系统可以将消息发送到发布/订阅信道以识别另一个实例(624)。无论如何,消息传送系统可以为消息分配标识符(626)。消息传递系统可以创建新的未决响应任务(628)。消息传递系统可以经由websocket连接将消息传输到用于指定端点的本地连接器(630)。消息传递系统可以经由websocket连接检测来自用于指定端点的本地连接器的响应(632)。在检测到来自本地连接器的响应时,消息传递系统可以完成未决响应任务(634)。
[0114] 另一方面,如果消息是到本地连接器的,则消息传递系统可以执行图6C所示的功能。最后参考图6C,消息传递系统可以确定该连接是否被分配给另一个实例(638)。如果连接被分配给另一个实例,则消息传递系统可以将消息发送到发布/订阅信道以识别另一个实例(640)。无论如何,消息传递系统可以为消息分配标识符(626)。消息传递系统可以创建新的未决响应任务(642)。消息传递系统可以处理该消息,以经由websocket连接发送给指定端点的本地连接器(646)。消息传递系统可以完成未决响应任务(648),并且可以将响应传输到本地连接器(650)。
[0115] 现在参考图7,描述了一种用于经由websocket连接提供消息的方法。该方法包括以下步骤:维持持久的websocket连接(702),接收要发送的消息(704),识别发送消息所经由的实例(706)以及传输消息(708)。
[0116] 更详细地,在一些实施例中,维持持久的websocket连接(702)包括通过消息传递系统,经由消息传递系统的多个消息传递系统实例,在第一网络上维持多个持久的websocket连接,这些websocket连接处在多个本地连接器中的每一个和多个消息传递系统实例中的每一个之间。
[0117] 在一些实施例中,接收要发送的消息(704)包括由消息传递系统接收要发送到多个本地连接器中的本地连接器的第二网络上的端点的消息。
[0118] 在一些实施例中,识别发送消息所经由的实例(706)包括由消息传递系统,经由将本地连接器端点与消息传递实例相关联的注册表,来识别多个消息传递系统实例中的将消息发送到端点所经由的消息传递系统实例,消息传递系统实例维持到与端点通信的本地连接器的websocket连接。在一些实施例中,消息传递系统可以通过将消息提交给候选消息传递系统实例,由候选消息传递系统实例确定存在到本地连接器的可用websocket连接,以及由候选消息传递系统实例识别建立了websocket连接的消息传递系统实例是候选消息传递系统实例,来识别建立了到本地连接器的websocket连接的消息传递系统的消息传递系统实例。如果候选消息传递系统实例确定建立了websocket连接的消息传递系统实例不是候选消息传递系统,则候选消息传递系统实例可以将消息发布到标识websocket连接的连接标识符的发布/订阅信道。
[0119] 在一些实施例中,传输消息(708)包括由消息传递系统经由到本地连接器的websocket连接向端点传输消息。在一些实施例中,可以预先建立websocket连接。在一些实施例中,可以在确定不存在可用的websocket连接时建立websocket连接。在一些实施例中,该方法包括通过消息传递系统实例建立到本地连接器的websocket连接。在一些实施例中,建立websocket连接包括在发布/订阅信道中创建订阅,该订阅标识连接标识符,该连接标识符标识websocket连接。
[0120] 应该理解,上文描述的系统可提供这些组件的任意多个或每一个并且这些组件可以在独立机器上提供,或者在一些实施例中,可在分布式系统的多个机器上提供。可以通过使用编程和/或工程技术以提供软件、固件、硬件或上述的任何组合,将上文所描述的系统和方法实现为方法、设备或产品。此外,上述系统和方法可作为在一件或多件产品上实现或在其中实现的一个或多个计算机可读程序而被提供。本文使用的术语“产品”旨在包括从一个或多个计算机可读的装置、固件、可编程逻辑、存储器装置(例如,EEPROM、ROM、PROM、RAM、SRAM等)、硬件(例如,集成电路芯片、现场可编程阵列(FPGA)、专用集成电路(ASIC)等)、电子装置、计算机可读的非易失存储单元(例如,CD-ROM、硬盘等)可访问的或嵌入其中的代码或逻辑。所述产品经由网络传输线、无线传输介质、通过空间传播的信号无线电波、红外信号等,可从提供计算机可读程序访问的文件服务器,被访问的。所述产品可以是闪存卡或磁带。所述产品包括硬件逻辑以及嵌入在计算机可读介质中由处理器执行的软件或可编程代码。通常,计算机可读程序可以任何编程语言来实现,如LISP、PERL、C、C++、C#、PROLOG,或者诸如JAVA的任何字节码语言。软件程序可以作为目标代码被存储在一件或多件产品上或其中。
[0121] 尽管已经描述该方法和系统的各种实施例,但是这些实施例是示例性的并且不以任何方式限制所述方法或系统的范围。相关领域中的技术人员在不脱离所描述方法和系统的最宽范围的情况下可以对所描述的方法和系统的形式和细节进行修改。因此,本文描述的方法和系统的范围不应该通过这些示例性实施例来限定,而是应该根据所附权利要求书和其等价范围来限定。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈