CN109417503A - 可扩展消息传送系统中的消息压缩 - Google Patents
可扩展消息传送系统中的消息压缩 Download PDFInfo
- Publication number
- CN109417503A CN109417503A CN201780035739.8A CN201780035739A CN109417503A CN 109417503 A CN109417503 A CN 109417503A CN 201780035739 A CN201780035739 A CN 201780035739A CN 109417503 A CN109417503 A CN 109417503A
- Authority
- CN
- China
- Prior art keywords
- message
- channel
- node
- hoc
- thread
- 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
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/56—Unified messaging, e.g. interactions between e-mail, instant messaging or converged IP messaging [CPM]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/28—Flow control; Congestion control in relation to timing considerations
- H04L47/286—Time to live
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/06—Message adaptation to terminal or network requirements
- H04L51/066—Format adaptation, e.g. format conversion or compression
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/21—Monitoring or handling of messages
- H04L51/214—Monitoring or handling of messages using selective forwarding
-
- 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/01—Protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/04—Protocols for data compression, e.g. ROHC
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Information Transfer Between Computers (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明提供了包括编码在计算机存储介质上的计算机程序的方法、系统和设备,用于:从多个发布者客户端接收多个消息,各消息针对多个不同通道中的特定通道,其中各通道包括有顺序的多个消息;基于特定字典来对各消息进行编码;根据所述顺序将编码后消息存储在一个或多个相应缓冲器中,各缓冲器具有相应存活时间并且驻留在相应节点上;从具有尚未期满的存活时间的相应缓冲器中并且根据所述顺序检索所述特定通道的编码后消息;基于所述特定字典来对各检索消息进行解码;以及将解码后消息发送至多个订户客户端。
Description
技术领域
本申请要求2016年6月7日提交的美国专利申请15/175,588的优先权,其全部内容通过引用而并入于此。
背景技术
本说明书涉及数据通信系统,特别地涉及用于实现消息通道中的消息压缩的系统。
发布-订阅模式(或者“PubSub”)是利用软件系统实现的数据通信消息传送布置,其中,所谓的发布者将消息发布到主题,并且所谓的订户接收与他们所订阅的特定主题有关的消息。每个主题可以存在一个或多个发布者,并且发布者一般不知道什么样的订户(如果有的话)将接收到所发布的消息。一些PubSub系统不缓存消息或者具有小的缓存,这意味着订户可能不会接收到在订阅特定主题之前所发布的消息。在消息发布激增期间、或者随着特定主题的订户的数量增加,PubSub系统可能易受到性能不稳定性的影响。
发明内容
一般来说,本说明书中所描述的主题的一个方面可以体现在如下的方法中,该方法包括如下的动作:从多个发布者客户端接收多个消息,各消息针对多个不同通道中的特定通道,其中各通道包括有顺序的多个消息;基于特定字典来对各消息进行编码;根据所述顺序将编码后消息存储在一个或多个相应缓冲器中,各缓冲器具有相应存活时间并且驻留在相应节点上;从具有尚未期满的存活时间的相应缓冲器中并且根据所述顺序检索所述特定通道的编码后消息;基于所述特定字典来对各检索消息进行解码;以及将解码后消息发送至多个订户客户端。该方面的其它实施例包括相应的系统、设备和计算机程序。
这些和其它方面的实现可以可选地包括以下特征中的一个或多个。所述特定字典可以包括所述特定通道的所述多个消息中的至少一些消息可共享的一个或多个模式。特定模式可以包括文本串。特定模式可以与所述特定通道的所述多个消息中的至少一些消息所共享的公共数据字段相对应。特定模式可以包括特定数据类型。该方面还可以包括:检查所述特定通道的一个或多个接收消息的内容;确定检查消息所共享的特定模式;以及将所述特定模式添加到所述特定字典。对特定消息进行编码还可以包括:根据特定模式来压缩所述特定消息;以及对特定消息进行解码还包括将所述特定消息重构为未压缩的。根据所述特定模式来压缩所述特定消息还可以包括将所述顺序中与所述特定消息相邻、并且包括所述特定模式的第二消息与所述特定消息进行压缩。将编码后消息存储在驻留于第一节点上的第一缓冲器中可以包括将多个编码后消息发送至所述第一节点,其中所述第一节点将多个编码后消息存储在所述第一缓冲器内的一个或多个块中的第一块中,其中各块具有相应的存活时间。从所述第一缓冲器中检索编码后消息还可以包括在具有尚未期满的相应存活时间的一个或多个块中检索编码后消息。
可以实施本说明中所描述的主题的特定实施例,以实现以下优点中的一个或多个优点。消息传送系统为发布者和订户之间的数据通信提供了多个通道。所述消息传送系统的各通道包括有顺序的消息序列。所述消息被存储在驻留于相应队列节点上的多个缓冲器(通道细流)中。各缓冲器具有相应的存活时间,例如,有限且通常较短的存活时间。以与发布消息并将消息存储在通道中相同的顺序来将所述通道的消息提供至所述通道的订户。另外,在将通道的消息存储在相应缓冲器中之前基于针对所述通道的特定字典来对所述通道的消息进行编码。从相应缓冲器中检索编码后消息,并在将所述编码后消息提供至所述通道的订户之前基于所述特定字典来对其进行解码。以这种方式,消息可以在被存储在缓冲器中之前进行压缩,因此与不压缩消息的情况相比将占据较少的存储空间。
在附图和以下的描述中详细阐述了本说明书中所描述的主题的一个或多个实施例。根据说明书、附图和权利要求,本主题的其它特征、方面和优点将变得明显。
附图说明
图1A示出支持PubSub通信模式的示例性系统。
图1B示出示例性客户端装置上的软件的功能层。
图2是示例性消息传送系统的图。
图3A是用于将数据写入通道细流(streamlet)的示例性方法的数据流程图。
图3B是用于从通道细流读取数据的示例性方法的数据流程图。
图4A是用于将消息发布到消息传送系统的通道的示例性方法的数据流程图。
图4B是用于订阅消息传送系统的通道的示例性方法的数据流程图。
图4C是用于存储消息传送系统的通道的消息的示例性数据结构。
图5是用于消息传送系统中的消息压缩的示例性方法的数据流程图。
图6是用于消息传送系统中的消息压缩的示例性方法的流程图。
具体实施方式
图1A示出支持PubSub通信模式的示例性系统100。发布者客户端(例如,发布者1)可以通过系统100来将消息发布到命名通道(例如,“通道1”)。消息可以包括任何类型的信息,该信息包括以下各项中的一项或多项:文本、图像内容、声音内容、多媒体内容、视频内容、以及二进制数据等。其它类型的消息数据也是可以的。订户客户端(例如,订户2)可以使用系统100来订阅命名通道,并且开始接收在订阅请求之后发生的或来自给定位置(例如,消息编号或时间偏移)的消息。客户端可以是发布者和订户两者。
根据配置,PubSub系统可以分类如下:
·一对一(1:1)。在该配置中,各通道存在一个发布者和一个订户。典型
的用例是私人消息传送。
·一对多(1:N)。在该配置中,各通道存在一个发布者和多个订户。典型
的用例是广播消息(例如,股票价格)。
·多对多(M:N)。在该配置中,存在发布到单个通道的许多发布者。消息然后被传递给多个订户。典型的用例是地图应用。
创建命名通道不需要单独的操作。在订阅通道时或者在向通道发布消息时隐式地创建通道。在一些实现中,通道名称可以由名称空间来限定。名称空间包括一个或多个通道名称。不同的名称空间可以具有相同的通道名称,而不会引起歧义。名称空间的名称可以是通道名称的前缀,其中名称空间和通道名称以点分隔。在一些实现中,可以在指定通道授权设置时使用名称空间。例如,消息传送系统100可以具有app1.foo和app1.system.notifications通道,其中“app1”是名称空间的名称。系统可以允许客户端订阅和发布到app1.foo通道。然而,客户端仅可以订阅但不发布到app1.system.notifications通道。
图1B示出示例性客户端装置上的软件的功能层。客户端装置(例如,客户端102)是诸如个人计算机、膝上型计算机、平板计算机、智能电话、智能手表或服务器计算机等的数据处理设备。其它类型的客户端装置也是可以的。应用层104包括将与PubSub系统100集成的最终用户应用。消息传送层106是应用层104的编程接口以利用系统100的诸如通道订阅、消息发布、消息检索、用户认证和用户授权等的服务。在一些实现中,被传递到消息传送层106以及从消息传送层106传递的消息被编码为JavaScript对象表示法(JSON)对象。其它消息编码方案也是可以的。
操作系统108层包括客户端102上的操作系统软件。在各种实现中,可以使用持久性或非持久性连接来发送和接收去往/来自系统100的消息。可以使用例如网络套接字来创建持久连接。诸如TCP/IP层112等的传输协议实现了与系统100的传输控制协议/因特网协议通信,其中消息传送层106可以使用该通信以通过到系统100的连接来发送消息。其它通信协议也是可以的,包括例如用户数据报协议(UDP)。在其它实现中,可以采用可选的传输层安全(TLS)层110来确保消息的机密性。
图2是示例性消息传送系统100的图。系统100提供用于实现PubSub通信模式的功能。例如,该系统包括可被部署在一个或多个地理位置中的一个或多个数据中心122处的软件组件和存储器。该系统包括MX节点(例如,MX节点或多路复用器节点202、204和206)、Q节点(例如,Q节点或队列节点208、210和212)、一个或多个通道管理器节点(例如,通道管理器214、215)、以及可选的一个或多个C节点(例如,C节点或缓存节点220和222)。各节点可以在虚拟机中或者在物理机(例如,数据处理设备)上执行。各MX节点用作通过外部网络216的一个或多个发布者和/或订户连接的终止点。例如,MX节点、Q节点、C节点和通道管理器之间的内部通信通过内部网络218进行。通过说明的方式,MX节点204可以是来自客户端102的订户连接的终点。各Q节点缓冲通道数据以供MX节点消耗。发布到通道的有序消息序列是逻辑通道流。例如,如果三个客户端向给定通道发布消息,则这些客户端所发布的组合消息包括通道流。可以按照客户端的发布时间、MX节点的接收时间、或Q节点的接收时间在通道流中对消息进行排序。用于在通道流中对消息进行排序的其它方式也是可以的。在多于一个消息将按照顺序被分配到同一位置的情况下,一个消息可被(例如,随机地)选择为具有顺序中的较晚序列。各通道管理器节点负责通过将通道流分割成所谓的通道细流来管理Q节点负载。以下进一步讨论通道细流。可选的C节点提供缓存以及Q节点中的负载移除。
在示例性消息传送系统100中,一个或多个客户端装置(发布者和/或订户)建立到MX节点(例如,MX节点204)的相应的持久性连接(例如,TCP连接)。MX节点用作这些连接的终止点。例如,可以基于外部协议(例如,JSON)来对这些连接所运载的(例如,相应的客户端装置和MX节点之间的)外部消息进行编码。MX节点终止外部协议并将外部消息转译为内部通信,并且反之亦然。MX节点代表客户端向通道细流进行发布和对通道细流进行订阅。以这种方式,MX节点可以对订阅同一通道或发布到同一通道的客户端装置的请求进行多路复用和合并,从而将多个客户端装置表示为一个,而不是一个接一个地表示。
在示例性消息传送系统100中,Q节点(例如,Q节点208)可以存储一个或多个通道流的一个或多个通道细流。通道细流是针对通道流的一部分的数据缓冲器。当通道细流的存储已满时,它将关闭写入。当通道细流的存活时间(TTL)期满时,它将关闭读取和写入并被解除分配。通过说明的方式,通道细流可以具有1MB的最大尺寸和三分钟的TTL。不同的通道可以具有由不同的TTL限定的通道细流。例如,一个通道中的通道细流最多可以存在三分钟,而另一通道中的通道细流最多可以存在10分钟。在各种实现中,通道细流与Q节点上运行的计算进程相对应。例如,可以在通道细流的TTL期满之后终止计算进程,从而将(用于通道细流的)计算资源释放回Q节点。
当从客户端装置接收到发布请求时,MX节点(例如,MX 204)向通道管理器(例如,通道管理器214)作出请求以授权对通道细流的访问从而写入正被发布的消息。然而,注意,如果MX节点已被授权对通道的通道细流的写入访问(并且通道尚未关闭写入),则MX节点可以将消息写入该通道细流,而无需请求对访问通道细流的授权。一旦消息被写入通道的通道细流,则该消息可以由MX节点读取并被提供给该通道的订户。
同样,当从客户端装置接收到通道订阅请求时,MX节点向通道管理器作出请求以授权对所读取消息的通道的通道细流的访问。如果MX节点已被授权对通道的通道细流的读取访问(并且通道的TTL尚未关闭读取),则MX节点可以从通道细流读取消息,而无需请求对访问通道细流的授权。读取的消息然后可被转发至已订阅该通道的客户端装置。在各种实现中,从通道细流读取的消息由MX节点缓存,以使得MX节点可以减少从通道细流读取所需的次数。
通过说明的方式,MX节点可以从通道管理器请求授权,其中该授权允许MX节点将数据块存储到用于存储特定通道的通道细流的特定Q节点上的通道细流中。示例性通道细流授权请求和授权数据结构如下:
StreamletGrantRequest数据结构存储流的名称channel,并且mode指示MX节点是意图从通道细流读取还是写入通道细流。MX节点将StreamletGrantRequest发送到通道管理器节点。作为响应,通道管理器节点向MX节点发送StreamletGrantResponse数据结构。StreamletGrantResponse包含通道细流的标识符(streamlet-id)、通道细流的最大尺寸(limit-size)、通道细流可以存储的消息的最大数量(limit-msgs)、TTL(limit-life)、以及通道细流驻留的Q节点(q-node)的标识符。StreamletGrantRequest和StreamletGrantResponse还可以具有指向用于从通道细流读取的通道细流中的位置(或通道中的位置)的position字段。
一旦通道细流关闭,则授权变为无效。例如,一旦通道细流的TTL已经期满,则该通道细流被关闭读取和写入,并且当通道细流的存储装置已满时,该通道细流被关闭写入。当授权变为无效时,MX节点可以从通道管理器请求新的授权以从通道细流读取或写入通道细流。新的授权将引用不同的通道细流,并且将根据新的通道细流驻留的位置来引用相同的或不同的Q节点。
图3A是各个实施例中的用于将数据写入通道细流的示例性方法的数据流程图。在图3A中,在MX节点(例如,MX节点202)请求写入通道细流被通道管理器(例如,通道管理器214)授权的情况下,如前所述,MX节点建立与从通道管理器(302)接收到的授权响应中所标识的Q节点(例如,Q节点208)的传输控制协议(TCP)连接。通道细流可以由(例如,用于由多个发布者客户端发布的消息的)多个写入授权并发写入。MX节点和Q节点之间的其它类型的连接协议也是可以的。
然后MX节点发送准备发布消息(304),其中该准备发布消息具有MX节点想要写入Q节点的通道细流的标识符。通道细流标识符和Q节点标识符可以由通道管理器在前面所述的写入授权中提供。Q节点将消息移交给所标识的通道细流的处理程序进程301(例如,Q节点上运行的计算进程)(306)。处理程序进程可以向MX节点发送确认(308)。在接收到确认之后,MX节点开始将消息(例如,310、312、314和318)写入(发布)到处理程序进程,该处理程序进程转而将所接收到的数据存储在所标识的通道细流中。处理程序进程还可以针对所接收到的数据向MX节点发送确认(316、320)。在一些实现中,确认可以是捎带式(piggy-backed)的或累积式的。例如,处理程序进程可以向MX节点发送针对所接收到的每预定量的数据(例如,针对接收到的每100个消息)、或者针对每预定时间段(例如,针对每毫秒)的确认。可以使用诸如Nagle算法等的其它确认调度算法。
如果通道细流不再接受发布的数据(例如,当通道细流已满时),则处理程序进程发送指示问题的否定确认(NAK)消息(330)、接着发送EOF(文件结束)消息(332)。以这种方式,处理程序进程关闭与用于发布授权的MX节点的关联。如果MX节点具有附加的消息要存储,则该MX节点可以从通道管理器请求对另一通道细流的写入授权。
图3B是各个实施例中的用于从通道细流读取数据的示例性方法的数据流程图。在图3B中,MX节点(例如,MX节点204)向通道管理器(例如,通道管理器214)发送用于读取从通道中的特定消息或时间偏移开始的特定通道的请求。通道管理器向MX节点返回读取授权,其包括包含特定消息的通道细流的标识符、通道细流中与特定消息相对应的位置、以及包含特定通道细流的Q节点(例如,Q节点208)的标识符。然后MX节点建立与Q节点的TCP连接(352)。MX节点和Q节点之间的其它类型的连接协议也是可以的。
然后MX节点向Q节点发送订阅消息(354),其中该订阅消息具有(Q节点中的)通道细流的标识符以及通道细流中MX节点想要读取的位置(356)。Q节点将订阅消息移交给通道细流的处理程序进程351(356)。处理程序进程可以向MX节点发送确认(358)。然后处理程序进程向MX节点发送在通道细流中的该位置处开始的消息(360、364、366)。在一些实现中,处理程序进程可以将通道细流中的所有消息发送到MX节点。在发送特定通道细流中的最后一个消息之后,处理程序进程可以向MX节点发送对最后一个消息的通知。MX节点可以向通道管理器发送用于包含特定通道中的下一消息的另一通道细流的另一请求。
如果特定通道细流(例如,在其TTL期满之后)关闭,则处理程序进程可以发送取消订阅消息(390)、接着发送EOF消息(392),以关闭与用于读取授权的MX节点的关联。当MX节点(例如,按照通道管理器的指示)移动到特定通道中的消息的另一通道细流时,MX节点可以关闭与处理程序进程的关联。如果MX节点接收到来自相应的客户端装置的取消订阅消息,则MX节点也可以关闭与处理程序进程的关联。
在各种实现中,可以同一时刻写入和读取通道细流。例如,在同一时刻可以存在有效的读取授权和有效的写入授权。在各种实现中,通道细流可以由(例如,用于由多个发布者客户端订阅的通道的)多个读取授权并发读取。通道细流的处理程序进程可以基于例如到达时间对来自并发写入授权的消息进行排序,并基于顺序来存储这些消息。以这种方式,从多个发布者客户端发布到通道的消息可被序列化并被存储在通道的通道细流中。
在消息传送系统100中,一个或多个C节点(例如,C节点220)可以卸载来自一个或多个Q节点的数据传输。例如,如果存在许多MX节点从特定通道的Q节点请求通道细流,则通道细流可被卸载并被缓存在一个或多个C节点中。作为替代,MX节点(例如,按照来自通道管理器的读取授权的指示)可以从C节点读取通道细流。
如上所述,在通道流中对消息传送系统100中的通道的消息进行排序。通道管理器(例如,通道管理器214)将通道流分割成固定大小的通道细流,其中各通道细流驻留在相应的Q节点上。以这种方式,可以在许多Q节点中共享存储通道流;各Q节点存储通道流的一部分(一个或多个通道细流)。更特别地,通道细流可被存储在与Q节点上的计算进程相关联的寄存器和动态存储器元件中,从而避免需要访问诸如硬盘等的永久性的较慢存储装置。这得到了更快的消息访问。通道管理器还可以通过监视Q节点的相应工作负载并按照避免使任何一个Q节点过载的方式分配通道细流,来平衡消息传送系统100中的Q节点中的负载。
在各种实现中,通道管理器维护如下的列表,其中该列表标识各有效通道细流、通道细流驻留的相应Q节点、对通道细流中的第一消息的位置的标识、以及通道细流是否关闭写入。在一些实现中,Q节点向通道管理器以及正向通道细流发布的任意MX节点通知通道细流由于已满或者通道细流的TTL期满而关闭。当通道细流关闭时,通道细流保持在通道管理器的有效通道细流列表上直到通道细流的TTL期满为止,以使得MX节点可以继续从通道细流检索消息。
在MX节点针对给定通道请求写入授权、并且对于该通道不存在可以写入的通道细流的情况下,通道管理器分配Q节点其中之一上的新的通道细流,并在StreamletGrantResponse中返回通道细流和Q节点的身份。否则,通道管理器在StreamletGrantResponse中返回当前开放用于写入的通道细流和相应Q节点的身份。MX节点可以向通道细流发布消息,直到通道细流已满或者通道细流的TTL期满为止,此后可以由通道管理器分配新的通道细流。
在MX节点针对给定通道请求读取授权、并且对于该通道不存在可以读取的通道细流的情况下,通道管理器分配Q节点其中之一上的新的通道细流,并在StreamletGrantResponse中返回通道细流和Q节点的身份。否则,通道管理器返回包含MX节点希望读取的位置的通道细流和Q节点的身份。然后Q节点可以开始向MX节点发送来自在指定位置处开始的通道细流的消息,直到通道细流中没有更多的消息要发送为止。当新消息被发布到通道细流时,已订阅该通道细流的MX节点将接收该新消息。如果通道细流的TTL已期满,则处理程序进程351向订阅该通道细流的任意MX节点发送EOF消息(392)。
如前面参考图2所述,消息传送系统100可以包括多个通道管理器(例如,通道管理器214、215)。多个通道管理器提供弹性并防止单点故障。例如,一个通道管理器可以将其维护的通道细流和当前授权的列表复制给另一“从属”通道管理器。作为另一示例,多个通道管理器可以使用诸如Paxos或Raft协议等的分布式共识协议来协调它们之间的操作。
图4A是用于将消息发布到消息传送系统的通道的示例性方法的数据流程图。在图4A中,发布者(例如,发布者客户端402、404、406)将消息发布到前面参考图2所述的消息传送系统100。例如,发布者402分别建立连接411并向MX节点202发送发布请求。发布者404分别建立连接413并向MX节点206发送发布请求。发布者406分别建立连接415并向MX节点204发送发布请求。这里,MX节点可以经由内部网络218来与消息传送系统100中的通道管理器(例如,通道管理器214)以及一个或多个Q节点(例如,Q节点212和208)进行通信(417)。
通过说明的方式,从发布者到MX节点的各发布请求(例如,在JSON关键字/值对中)包括通道名称和消息。MX节点(例如,MX节点202)可以基于发布请求的通道名称(例如,“foo”)来将发布请求中的消息分配给消息传送系统100中的不同通道。MX节点可以向通道管理器214确认所分配的通道。如果(订阅请求中指定的)通道在消息传送系统100中尚不存在,则通道管理器可以在消息传送系统100中创建并维护新的通道。例如,通道管理器可以通过维护用于标识以下各项的列表来维护新的通道:通道流的各有效通道细流、通道细流驻留的相应Q节点、以及如前所述的通道细流中的第一个消息和最后一个消息的位置的标识。
对于特定通道的消息,MX节点可以将消息存储在消息传送系统100中的一个或多个缓冲器或通道细流中。例如,MX节点202从发布者402接收用以将消息M11、M12、M13和M14发布到通道foo的请求。MX节点206从发布者404接收用以将消息M78和M79发布到通道foo的请求。MX节点204从发布者406接收用以将消息M26、M27、M28、M29、M30和M31发布到通道foo的请求。
MX节点可以标识用于存储通道foo的消息的一个或多个通道细流。如前所述,各MX节点可以从通道管理器214请求写入授权,其中该写入授权允许MX节点将信息存储在通道foo的通道细流中。例如,MX节点202从通道管理器214接收用以将消息M11、M12、M13和M14写入Q节点212上的通道细流4101的授权。MX节点206从通道管理器214接收用以将消息M78和M79写入通道细流4101的授权。这里,通道细流4101是存储通道foo的消息的通道流430的通道细流序列的最后一个(在当时)。通道细流4101具有先前存储在通道细流4101中但仍然开放的通道foo的消息(421),即通道细流4101仍具有用于存储更多消息的空间并且通道细流的TTL尚未期满。
MX节点202可以基于MX节点202接收到各消息(例如,M11、M13、M14、M12)的相应时间来布置通道foo的消息(422),并且按照布置将所接收到的消息存储在通道细流4101中。也就是说,MX节点202首先接收M11,然后接收M13、M14和M12。同样,MX节点206可以基于MX节点206接收到各消息(例如,M78、M79)的相应时间来布置通道foo的消息(423),并且按照布置将所接收到的消息存储在通道细流4101中。
例如,MX节点202(或MX节点206)可以使用前面参考图3A所述的用于将数据写入通道细流的方法来存储所接收到的消息。在各种实现中,MX节点202(或MX节点206)可以(例如,在本地数据缓冲器中)缓冲所接收到的通道foo的消息,并在缓冲消息达到预定大小(例如,100个消息)或者已经过去预定时间(例如,50毫秒)时将所接收到的消息存储在通道foo的通道细流(例如,通道细流4101)中。也就是说,MX节点202可以一次性将100个消息存储在通道细流中,或者每50毫秒进行存储。可以使用诸如Nagle算法等的其它确认调度算法。
在各种实现中,Q节点212(例如,处理程序进程)按照如MX节点202和MX节点206所布置的顺序来将通道foo的消息存储在通道细流4101中。Q节点212按照Q节点212接收消息的顺序来将通道foo的消息存储在通道细流4101中。例如,假设Q节点212首先接收到(来自MX节点206的)消息M78,然后是(来自MX节点202的)消息M11和M13、(来自MX节点206的)M79、以及(来自MX节点202的)M14和M12。Q节点212将这些消息(例如,M78、M11、M13、M79、M14和M12)按照被接收的顺序存储在通道细流4101中,紧跟在已存储在通道细流4101中的消息421之后。以这种方式,从多个发布者(例如,402、404)发布到通道foo的消息可以以特定顺序被序列化并被存储在通道foo的通道细流4101中。订阅通道foo的不同订户将以同一特定顺序接收通道foo的消息,如将参考图4B更详细所述。
在图4A的示例中,在消息M12被存储在通道细流4101中之后的某一时刻,MX节点204从通道管理器214请求写入通道foo的授权。由于通道细流4101仍开放写入,因此通道管理器214向MX节点204提供向通道细流4101写入消息的授权。MX节点204基于MX节点204接收到各消息(例如,M26、M27、M31、M29、M30、M28)的相应时间来布置通道foo的消息(424),并且按照针对通道foo的布置来存储这些消息。
通过说明的方式,假设消息M26被存储到通道细流4101的最后可用位置。由于通道细流4101现在已满,因此Q节点212向MX节点204发送NAK消息、接着发送EOF消息,以关闭与MX节点204的用于写入授权的关联,如前面参考图3A所述。然后MX节点204从通道管理器214请求用于通道foo的附加消息(例如,M27、M31等)的另一写入授权。
通道管理器214可以监视消息传送系统100中的可用Q节点的相应工作负载(例如,多少个通道细流驻留在各Q节点中)。通道管理器214可以为来自MX节点204的写入请求分配通道细流,使得可以针对任意给定Q节点避免过载(例如,太多的通道细流或太多的读取或写入授权)。例如,通道管理器214可以标识消息传送系统100中的最小负载Q节点,并将最小负载Q节点上的新的通道细流分配用于来自MX节点204的写入请求。在图4A的示例中,通道管理器214分配Q节点208上的新的通道细流4102,并且向MX节点204提供用以将通道foo的消息写入通道细流4102的写入授权。如图4A所示,Q节点按照如MX节点204所布置的如下顺序将来自MX节点204的消息存储在通道细流4102中:M27、M31、M29、M30和M28(假设此时不存在针对通道细流4102的其它并发写入授权)。
在通道管理器214为来自MX节点(例如,MX节点204)的授权请求分配用以写入通道(例如,foo)的新通道细流(例如,通道细流4102)的情况下,通道管理器214向通道细流分配将在已经位于通道流中的其它通道细流的TTL之后期满的TTL。例如,在分配通道细流时,通道管理器214可以向通道foo的通道流的各通道细流分配3分钟的TTL。也就是说,各通道细流将在其由通道管理器214分配(创建)3分钟之后期满。由于在先前的通道细流关闭(例如,完全填充或期满)之后分配新的通道细流,以这种方式,通道foo的通道流包括分别在其先前的通道细流期满之后依次期满的通道细流。例如,如图4A中的通道foo的示例性通道流430所示,通道细流4098和4098之前的通道细流已经期满(如虚线灰色框所示)。存储在这些期满通道细流中的消息不可用于通道foo的订户的读取。通道细流4099、4100、4101和4102仍然是有效的(未期满)。通道细流4099、4100和4101关闭写入,但仍可用于读取。在消息M28被存储在通道细流4102中的时刻,通道细流4102可用于读取和写入。在稍后的时间,通道细流4099将期满、接着是通道细流4100、4101,以此类推。
图4B是用于订阅消息传送系统的通道的示例性方法的数据流程图。在图4B中,订户480建立与消息传送系统100的MX节点461的连接462。订户482建立与MX节点461的连接463。订户485建立与消息传送系统100的MX节点468的连接467。这里,MX节点461和468可以经由内部网络218分别与消息传送系统100中的通道管理器214以及一个或多个Q节点进行通信(464)。
订户(例如,订户480)可以通过建立连接(例如,462)并向MX节点(例如,MX节点461)发送订阅通道foo的消息的请求,来订阅消息传送系统100的通道foo。该请求(例如,在JSON关键字/值对中)可以包括通道名称“foo”。当接收到订阅请求时,MX节点461可以向通道管理器214发送针对通道foo的通道流中的通道细流的读取授权的请求。
通过说明的方式,假设在当前时刻,通道foo的通道流431包括有效通道细流4102、4103和4104,如图4B所示。通道细流4102和4103均已满。通道细流4104存储通道foo的消息,包括(在当前时刻)存储在位置47731处的最后消息。通道细流4101和4101之前的通道细流是无效的,这是因为它们各自的TTL已经期满。注意,前面参考图4A所述的存储在通道细流4101中的消息M78、M11、M13、M79、M14、M12和M26不再可用于通道foo的订户,这是因为通道细流4101由于其TTL已期满因而不再有效。如前所述,通道foo的通道流中的各通道细流具有3分钟的TTL,因此仅在距离当前时间不早于3分钟被发布到通道foo(即存储到通道的通道细流中)的消息(如存储在通道foo的通道细流中的消息)可用于通道foo的订户。
例如,当订户480是通道foo的新订户时,MX节点461可以请求用于通道foo中的所有可用消息的读取授权。基于该请求,通道管理器214向MX节点461提供针对作为通道foo的有效通道细流中的最早通道细流(即有效通道细流的序列中的第一个)的(Q节点208上的)通道细流4102的读取授权。MX节点461可以使用前面参考图3B所述的用于从通道细流读取数据的方法来检索来自Q节点208的通道细流4102中的消息。注意,从通道细流4102检索到的消息维持与通道细流4102中所存储的顺序相同的顺序。在各种实现中,当将通道细流4102中所存储的消息提供给MX节点461时,Q节点208可以(例如,在本地数据缓冲器中)缓冲这些消息,并在缓冲消息达到预定大小(例如,200个消息)或者已经过去预定时间(例如,50毫秒)时将这些消息发送到MX节点461。也就是说,Q节点208可以将通道foo的消息(来自通道细流4102)一次200个地发送到MX节点461,或每50毫秒发送到MX节点。可以使用诸如Nagle算法等的其它确认调度算法。
在接收到通道细流4102中的最后一个消息之后,MX节点461可以向Q节点208发送确认,并且向通道管理器214发送针对通道foo的通道流中的下一通道细流的另一请求(例如,用于读取授权)。基于该请求,通道管理器214向MX节点461提供针对在通道foo的有效通道细流的序列中逻辑上跟在通道细流4102之后的(Q节点472上的)通道细流4013的读取授权。MX节点461可以例如使用前面参考图3B所述的用于从通道细流读取数据的方法来检索通道细流4013中所存储的消息,直到它检索到通道细流4013中所存储的最后一个消息为止。MX节点461可以向通道管理器214发送针对(Q节点474上的)下一通道细流4104中的消息的读取授权的另一请求。在接收到读取授权之后,MX节点461检索通道细流4014中所存储的通道foo的消息,直到位置47731处的最后一个消息为止。同样,MX节点468可以从通道细流4102、4103和4104检索消息(如图4B中的虚线箭头所示),并且将这些消息提供给订户485。
MX节点461可以(经由连接462)将检索到的通道foo的消息发送给订户480,同时从Q节点208、472或474接收消息。在各种实现中,MX节点461可以将检索到的消息存储在本地缓冲器中。以这种方式,当另一订户(例如,订户482)订阅通道foo并请求该通道的消息时,可以将检索到的消息提供给该另一订户。MX节点461可以移除本地缓冲器中所存储的、具有超过预定时间段的发布时间的消息。例如,MX节点461可以移除具有超过3分钟的相应的发布时间的(本地缓冲器中所存储的)消息。在一些实现中,用于将消息保持在MX节点461上的本地缓冲器中的预定时间段可以与通道foo的通道流中的通道细流的存活时间持续时间相同或相似,这是因为在给定时刻,从通道流检索到的消息不包括具有已期满的相应存活时间的通道细流中的那些消息。
从通道流431中检索到并被(MX节点461)发送给订户480的消息按照这些消息被存储在通道流中的相同顺序进行布置。例如,发布到通道foo的消息被序列化并且以特定顺序(例如,M27、M31、M29、M30以此类推)被存储在通道细流4102中,然后被依次存储在通道细流4103和通道细流4104中。MX节点从通道流431检索消息,并按照如下的这些消息被存储在通道流中的相同顺序来将这些消息提供给订户480:M27、M31、M29、M30以此类推,接着是通道细流4103中的有序消息,接着是通道细流4104中的有序消息。
代替检索通道流431中的所有可用消息,MX节点461可以请求用于通道流431中所存储的、从特定位置(例如,位置47202)处的消息开始的消息的读取授权。例如,位置47202可以与订户480(例如,经由到MX节点461或消息传送系统100的另一MX节点461的连接)最后订阅通道foo时的较早时刻(例如,在当前时间之前10秒)相对应。MX节点461可以向通道管理器214发送用于在位置47202开始的消息的读取授权的请求。基于该请求,通道管理器214向MX节点461提供对(Q节点474上的)通道细流4104、以及通道细流4104上的与通道流位置47202相对应的位置的读取授权。MX节点461可以检索通道细流4104中的从所提供的位置开始的消息,并将检索到的消息发送到订户480。
如以上参考图4A和图4B所述,发布到通道foo的消息被序列化并按照特定顺序被存储在通道的通道细流中。通道管理器214在通道细流被创建时对其有序序列进行维护,并贯穿它们相应的存活时间。在一些实现中,由MX节点(例如,MX节点461或MX节点468)从通道细流检索并提供给订户的消息可以按照与这些信息被存储在通道细流的有序序列中相同的顺序。以这种方式,被发送给不同订户(例如,订户480、订户482或订户485)的消息可以按照(与这些消息被存储在通道细流中)相同的顺序,而与订户连接到哪个MX节点无关。
在各种实现中,通道细流将消息存储在一组消息块中。各个块存储多个消息。例如,块可以存储两百个千字节的消息。各个块具有其自己的存活时间,该存活时间可能比持有该块的通道细流的存活时间短。如以下参考图4C更详细所述,一旦块的TTL已经期满,则可以从持有该块的通道细流中丢弃该块。
图4C是用于存储消息传送系统的通道的消息的示例性数据结构。如参考图4A和图4B关于通道foo所述,假设在当前时刻,通道foo的通道流432包括有效通道细流4104和4105,如图4C所示。通道细流4103和4103之前的通道细流是无效的,因为它们各自的TTL已期满。通道细流4104对于其(例如,由相应的写入授权所确定的)容量已满并且关闭附加消息写入。通道细流4104仍可用于消息读取。通道细流4105开放并且可用于消息写入和读取。
通过说明的方式,通道细流4104(例如,在图4B所示的Q节点474上运行的计算进程)当前持有两个消息块。块494持有来自通道位置47301~47850的消息。块495持有来自通道位置47851~48000的消息。通道细流4105(例如,在消息传送系统100中的另一Q节点上运行的计算进程)当前持有两个消息块。块496持有来自通道位置48001~48200的消息。块497持有从通道位置48201开始的消息,并仍然接受通道foo的附加消息。
在(例如,通过写入授权)创建通道细流4104时,创建第一块(子缓冲器)492以存储例如来自通道位置47010~47100的消息。稍后,在块492已达到其容量之后,创建另一块493以存储例如来自通道位置47111~47300的消息。随后创建块494和495以存储附加消息。之后,通道细流4104关闭附加消息写入,并且利用附加块来创建通道细流4105以存储通道foo的附加消息。
在该示例中,块492和493各自的TTL已期满。这两个块中所存储的(来自通道位置47010~47300)的消息不再可用于通道foo的订户的读取。通道细流4104可以例如通过解除分配块492和493的存储器空间来丢弃这两个期满的块。在通道细流4104自身变为无效之前,块494或495可能变为期满并被通道细流4104丢弃。替代地,通道细流4104自身可能在块494或495变为期满之前变为无效。以这种方式,通道细流可以持有一个或多个消息块,或者不包含消息块,这取决于例如通道细流和块的相应的TTL。
在消息传送系统100中的Q节点上运行的通道细流或计算进程可以通过从Q节点分配特定大小的存储器空间来创建用于存储通道的消息的块。通道细流可以从消息传送系统100中的MX节点一次接收一个消息,并将接收到的消息存储在块中。替代地,MX节点可以汇集(即,缓冲)一组消息并将该组消息发送到Q节点。通道细流可以(从Q节点)分配存储器空间的块,并将该组消息存储在该块中。MX节点还可以例如通过从各消息中移除公共头部来对该组消息进行压缩。
可以在系统100中采用一个或多个不同的消息压缩策略(参见表1)以节省消息存储空间并在端点之间传输较少的字节。这些策略可以在内部应用于MX节点到Q节点之间的通信,或者在外部应用于MX节点和发布者522/订户526之间、或Q节点和发布者522/订户526之间。表1中所描述的技术可以使用诸如DEFLATE(其使用LZ77和霍夫曼编码的组合)、Lempel-Ziv、霍夫曼编码或用于无损编码的其它方法(包括以下参考图5所述的基于字典的方法)等的算法来对数据进行压缩和解压缩。
表1
图5是用于消息传送系统100中的消息压缩的示例性方法500的数据流程图。如前所述,诸如图5所示的MX节点530和MX 540等的MX节点可以经由内部网络218与消息传送系统100中的通道管理器(例如,通道管理器214)进行通信(502)。MX节点还可以经由内部网络218与消息传送系统100中的Q节点(例如,Q节点208)进行通信。
在图5中,MX节点530通过连接520从发布者522接收发布请求。通过例示的方式,MX节点530从发布者522接收用以将消息M61、M62、M63、M64和M65发布至前面参考图4A所述的名为foo的通道的请求。MX节点530可以基于相应的到达时间(例如,按照M62、M63、M64、M61和M65的特定顺序)来布置消息,并(按照该特定顺序)将消息存储在通道foo的流的通道细流中。在该示例中,MX节点530从通道管理器214接收写入授权以从通道foo的流的通道细流4102的位置49623处开始存储消息。
在一些实现中,在存储消息M62、M63、M64、M61和M65之前,MX节点530使用特定字典对各消息进行编码。例如,MX节点530可以访问消息传送系统100中的字典数据数据库510a并检索可用于对MX节点530接收到的消息进行编码的字典。
用于对通道foo的消息进行编码的字典可以包括通道foo的一些或所有消息所共享的一个或多个模式。例如,特定模式可以包括一个或多个文本串。通过例示的方式,通道foo的各消息可以是多玩家图版游戏中的玩家的移动。如以下示例所示,各消息包括玩家标识符、方向、距离和消息中的关键字所用的关键字/值对的文本串:
{player:1234;direction:east;distance:02;message:boo-yah!}
{player:6789;direction:south;distance:15;message:bye}
在该示例中,通道foo的消息所共享的模式是由分号分隔符分隔并用大括号括起来的四个关键字/值文本串。基于该模式,MX节点530可以通过移除与通道foo的其它消息共享的公共字段或文本串(诸如四个关键字、冒号和分号等)来对通道foo的消息进行编码。例如,上面的第一个示例性消息可被编码为“1234,east,02,boo-yah!”。上面的第二个示例性消息可被编码为“6789,south,15,bye”。以这种方式,MX节点530通过去除在通道foo的消息之间共享的公共字段来压缩各消息。
在各种实现中,用于编码通道的消息的字典中的特定模式可以是包括特定数据类型的模式。例如,通道foo的各消息可以是以小数点数表示的(例如,数字温度计的)温度读数,其中小数点前有3位数字,小数点后有5位数字(例如,012.34567)。用于对通道foo的消息进行编码的字典可以规定消息所用的特定模式是小数点前有3位数字且小数点后有5位数字的浮点数。例如,MX节点530可以通过移除小数点来对各消息进行编码。此外,MX节点530可以用前导0接着连续0的计数来替代(仅)连续0(或连续1)。例如,00000010可被编码为0610。此外,MX节点530可以根据浮点模式对相邻消息进行编码。例如,如果消息M63是01110000、并且消息M64是0011111,则MX节点530可以将消息M63和M64编码为0130615,并指示已经组合了两个消息。
如上所述,特定通道所用的字典可以包括该特定通道的消息所共享的一个或多个模式。MX节点(或消息传送系统100的另一软件组件)可以检查特定通道的消息并确定由被检查消息共享的特定模式。例如,MX节点530可以检查通道foo的消息,并判断为消息包括浮点数。MX节点530可以创建浮点数的模式,并将该模式存储在字典数据数据库510a中的(特定于通道foo的)字典中。
MX节点530从位置46923处开始将编码后消息(552)存储在通道细流4102中。例如,MX节点530可以使用用于将数据写入前面参考图3A所述的通道细流的方法来将编码后消息存储在通道细流4102中。如前面参考图4C所述,MX节点530还可以将编码后消息存储在通道细流4102中的消息块中,其中各个块具有相应的存活时间。以这种方式,消息可以在被存储在通道细流中之前被解码和压缩,因此与不对消息进行解码和压缩的情况相比占据了通道细流中的较少存储空间。
在图5中,MX节点540通过连接524从订户526接收对通道foo的消息的订阅请求。通过例示的方式,假设在当前时刻,通道foo的通道流具有从通道细流4102开始的有效通道细流。MX节点540可以请求针对通道foo中的所有可用消息的读取授权。基于该请求,通道管理器214向MX节点540提供对(Q节点208上的)通道细流4102的读取授权。例如,MX节点540可以使用用于从前面参考图3B所述的通道细流读取数据的方法,在来自Q节点208的通道细流4102中检索编码后消息(533)。如前所述,如果编码后消息以消息块的形式存储在通道细流4102中,则MX节点540可以从具有尚未期满的相应存活时间的块(关闭或开放)中检索编码后消息。
MX节点540基于先前用于对消息进行编码的特定字典来对各编码后消息(例如,M62、M63、M64、M61或M65)进行解码。MX节点540可以访问特定字典的字典数据数据库510b,确定先前用于对消息进行编码的一个或多个模式或数据字段,并基于该模式或数据字段来对消息进行解码。例如,MX节点540可以将压缩浮点数解码为未压缩浮点数,例如,在上面的温度读数示例中将01304解码为011.10000。至于另一示例,MX节点540可以对压缩消息“6789,south,15,bye”进行解码,以为上面的图版游戏示例中的订户重构未压缩消息{player:6789;direction:south;distance:15;message:bye}。然后,MX节点540通过连接524以与将解码后消息(554)存储在通道细流4102中相同的顺序将解码后消息(554)提供至订户526。
图6是用于消息传送系统中的消息压缩的示例性方法的流程图。例如,图6的方法可以由消息传送系统100中的一个或多个MX节点实现。该方法以从多个发布者客户端接收多个消息开始,各消息针对多个不同通道中的特定通道,其中各通道包括有顺序的多个消息(例如,MX节点530,步骤602)。该方法基于特定字典对各消息进行编码(例如,MX节点530,步骤604)。该方法按照顺序将编码后消息存储在一个或多个相应缓冲器中,各缓冲器具有相应的存活时间并且驻留在相应节点上(例如,MX节点530,步骤606)。该方法从具有尚未期满的存活时间的相应缓冲器中并按照顺序检索特定通道的编码后消息(例如,MX节点540,步骤608)。该方法基于特定字典对各检索消息进行解码(例如,MX节点540,步骤610)。该方法将解码后消息发送到多个订户客户端(例如,MX节点540,步骤612)。
本说明书中所描述的主题和操作的实施例可以在数字电子电路中、或者在计算机软件、固件或硬件中实现,其中硬件包括本说明书中所公开的结构及其结构等同物、或者它们中的一个或多个的组合。本说明书中所描述的主题的实施例可以被实现为一个或多个计算机程序,即计算机程序指令的一个或多个模块,其编码在计算机存储介质上以供数据处理设备执行或用于控制数据处理设备的操作。可选地或附加地,程序指令可被编码在人工生成的传播信号(例如,机器生成的电、光或电磁信号)上,其中该信号被生成用于对信息进行编码,从而传输到适当的接收器设备以供数据处理设备执行。计算机存储介质可以是计算机可读存储设备、计算机可读存储基板、随机或串行存取存储器阵列或装置、或者它们中的一个或多个的组合,或者被包括在其中。此外,虽然计算机存储介质不是传播信号,但是计算机存储介质可以是编码在人工生成的传播信号中的计算机程序指令的源或目的地。计算机存储介质也可以是一个或多个单独的物理组件或介质(例如,多个CD、磁盘、或其它存储装置),或者被包括在其中。
本说明中所描述的操作可以被实现为数据处理设备对一个或多个计算机可读存储装置上所存储的或者从其它源接收到的数据所进行的操作。
术语“数据处理设备”包含用于处理数据的所有种类的设备、装置和机器,举例而言包括可编程处理器、计算机、片上系统或者前述的多个或组合。设备可以包括专用逻辑电路,例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除硬件以外,设备还可以包括为所考虑的计算机程序创建执行环境的代码,例如构成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行时环境、虚拟机或它们中的一个或多个的组合的代码。设备和执行环境可以实现各种不同的计算模型基础架构,诸如web服务、分布式计算和网格计算基础架构。
计算机程序(也称为程序、软件、软件应用、脚本或代码)可以以包括编译语言或解释语言、声明语言、过程语言或功能语言等的任何形式的编程语言来编写,并且其可以以任何形式进行部署,包括被部署为独立程序或者被部署为模块、组件、子例程、对象或者适合在计算环境中使用的其它单元。计算机程序可以但不必与文件系统中的文件相对应。程序可以被存储在用于保存其它程序或数据(例如,标记语言资源中所存储的一个或多个脚本)的文件的一部分中,被存储在专用于所考虑的程序的单个文件中,或者被存储在多个协同文件(例如,用于存储一个或多个模块、子程序或代码的一部分的文件)中。计算机程序可以被部署为在一个计算机上、或者在位于一个网站处或跨多个网站分布并且通过通信网络互连的多个计算机上执行。
本说明书中所描述的处理和逻辑流可以利用一个或多个可编程处理器来进行,其中这些一个或多个可编程处理器执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来进行动作。处理和逻辑流也可以利用专用逻辑电路来进行,并且设备也可以被实现为专用逻辑电路,其中该专用逻辑电路例如为FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
举例而言,适合执行计算机程序的处理器包括通用微处理器和专用微处理器两者、以及任何种类的数字计算机中的任意一个或多个处理器。一般地,处理器将会从只读存储器或随机存取存储器或这两者接收指令和数据。计算机的必要元件是用于根据指令进行动作的处理器以及用于存储指令和数据的一个或多个存储器装置。一般地,计算机还将包括用于存储数据的一个或多个大容量存储装置(例如,磁盘、磁光盘、或光盘等),或者可操作地连接以从一个或多个大容量存储装置接收数据或者向一个或多个大容量存储装置传输数据或者两者兼有。然而,计算机无需具有这种装置。此外,计算机可以嵌入在另一装置中,例如智能电话、移动音频或视频播放器、游戏机、全球定位系统(GPS)接收器或便携式存储装置(例如,通用串行总线(USB)闪存驱动器)等。适合存储计算机程序指令和数据的装置包括所有形式的非易失性存储器、介质和存储器装置,举例而言包括例如EPROM、EEPROM和闪存存储器装置等的半导体存储器装置、例如内部硬盘或可移动盘等的磁盘、磁光盘、以及CD-ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或者并入专用逻辑电路中。
为了提供与用户的交互,本说明书中所描述的主题的实施例可以在计算机上实现,其中该计算机具有用于向用户显示信息的例如CRT(阴极射线管)或LCD(液晶显示器)监视器等的显示装置、以及用户可以向计算机提供输入所经由的键盘和例如鼠标或追踪球等的指示装置。其它种类的装置也可以用于提供与用户的交互;例如,被提供至用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且来自用户的输入可以以任何形式接收,包括声音、语音或触觉输入。另外,计算机可以通过向用户所使用的装置发送资源并且从该装置接收资源来与用户进行交互;例如,通过响应于从用户的客户端装置上的web浏览器接收到的请求向该web浏览器发送web页面,来与用户进行交互。
本说明书中所描述的主题的实施例可以在计算系统中实现,其中该计算系统包括后端组件(例如数据服务器等),或者包括中间组件(例如应用服务器等),或者包括前端组件(例如,具有用户能够与本说明书中所描述的主题的实现进行交互所经由的图形用户界面或Web浏览器的客户端计算机)、或者包括一个或多个这样的前端组件、中间组件或后端组件的任意组合。系统的组件可以通过任何形式或介质的数字数据通信(例如,通信网络)而互连。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”)、互联网(例如,因特网)、以及对等网络(例如,自组织对等网络等)。
计算系统可以包括客户端和服务器。客户端和服务器一般彼此远离,并且通常通过通信网络进行交互。客户端和服务器的关系借助于运行在各个计算机上并且彼此具有客户端-服务器关系的计算机程序而产生。在一些实施例中,服务器将数据(例如,HTML页面)发送至客户端装置(例如,为了向与客户端装置进行交互的用户显示数据并从该用户接收用户数据)。可以在服务器处从客户端装置接收该客户端装置处所生成的数据(例如,用户交互的结果)。
一个或多个计算机的系统可被配置为通过在系统上安装操作中使系统进行动作的软件、固件、硬件或它们的组合,来进行特定的操作或动作。一个或多个计算机程序可被配置为通过包括在由数据处理设备执行时使该设备进行动作的指令,来进行特定的操作或动作。
虽然本说明书包含许多特定实现细节,但这些细节不应被解释为对所要求保护的本发明的范围的限制,而应被解释为特定于特定发明的特定实施例的特征描述。本说明书在单独实施例的上下文中所描述的某些特征还可以在单个实施例中组合实现。相反,在单个实施例的上下文中所描述的各种特征还可以在多个实施例中单独实现或者以任何合适的子组合实现。此外,尽管以上可以将特征描述为以某些组合起作用并且甚至最初如此要求保护这些特征,但是在一些情况下可以从组合中消除所要求保护的组合中的一个或多个特征,并且所要求保护的组合可以针对子组合或子组合的变形。
同样,虽然在附图中以特定顺序描绘了操作,但是这不应该被理解为要求以所示的特定顺序或者以序列顺序来进行这些操作、或者进行所有所示操作以实现期望结果。在某些情形中,多任务和并行处理可以是有利的。此外,上述实施例中的各种系统组件的分离不应被理解为在所有实施例中都要求这种分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中或者封装到多个软件产品中。
因此,已经描述了主题的特定实施例。其它实施例在所附权利要求书的范围内。在一些情况下,权利要求书中所列举的动作可以以不同的顺序进行,并且仍然实现期望结果。另外,附图中所描绘的处理并非必须需要所示的特定顺序或序列顺序来实现期望的结果。在某些实现中,多任务和并行处理可以是有利的。
Claims (30)
1.一种方法,包括:
利用一个或多个计算机来进行:
从多个发布者客户端接收多个消息,各消息针对多个不同通道中的特定通道,其中各通道包括有顺序的多个消息;
基于特定字典来对各消息进行编码;
根据所述顺序将编码后消息存储在一个或多个相应缓冲器中,各缓冲器具有相应存活时间并且驻留在相应节点上;
从具有尚未期满的存活时间的相应缓冲器中并且根据所述顺序检索所述特定通道的编码后消息;
基于所述特定字典来对各检索消息进行解码;以及
将解码后消息发送至多个订户客户端。
2.根据权利要求1所述的方法,其中,所述特定字典包括所述特定通道的所述多个消息中的至少一些消息所共享的一个或多个模式。
3.根据权利要求2所述的方法,其中,特定模式包括文本串。
4.根据权利要求2所述的方法,其中,特定模式与所述特定通道的所述多个消息中的至少一些消息所共享的公共数据字段相对应。
5.根据权利要求2所述的方法,其中,特定模式包括特定数据类型。
6.根据权利要求2所述的方法,还包括:
检查所述特定通道的一个或多个接收消息的内容;
确定检查消息所共享的特定模式;以及
将所述特定模式添加到所述特定字典。
7.根据权利要求2所述的方法,还包括:
对特定消息进行编码还包括根据特定模式来压缩所述特定消息;以及
对特定消息进行解码还包括将所述特定消息重构为未压缩的。
8.根据权利要求7所述的方法,其中,根据所述特定模式来压缩所述特定消息还包括将所述顺序中与所述特定消息相邻、并且包括所述特定模式的第二消息与所述特定消息进行压缩。
9.根据权利要求1所述的方法,其中,将编码后消息存储在驻留于第一节点上的第一缓冲器中包括:
将多个编码后消息发送至所述第一节点,其中所述第一节点将多个编码后消息存储在所述第一缓冲器内的一个或多个块中的第一块中,其中各块具有相应的存活时间。
10.根据权利要求9所述的方法,其中,从所述第一缓冲器中检索编码后消息还包括在具有尚未期满的相应存活时间的一个或多个块中检索编码后消息。
11.一种系统,包括:
一个或多个计算机,其被编程为进行包括以下各项的操作:
从多个发布者客户端接收多个消息,各消息针对多个不同通道中的特定通道,其中各通道包括有顺序的多个消息;
基于特定字典对各消息进行编码;
根据所述顺序将编码后消息存储在一个或多个相应缓冲器中,各缓冲器具有相应存活时间并且驻留在相应节点上;
从具有尚未期满的存活时间的相应缓冲器中并且根据所述顺序检索所述特定通道的编码后消息;
基于所述特定字典来对各检索消息进行解码;以及
将解码后消息发送至多个订户客户端。
12.根据权利要求11所述的系统,其中,所述特定字典包括所述特定通道的所述多个消息中的至少一些消息所共享的一个或多个模式。
13.根据权利要求12所述的系统,其中,特定模式包括文本串。
14.根据权利要求12所述的系统,其中,特定模式与所述特定通道的所述多个消息中的至少一些消息所共享的公共数据字段相对应。
15.根据权利要求12所述的系统,其中,特定模式包括特定数据类型。
16.根据权利要求12所述的系统,其中,所述操作还包括:
检查所述特定通道的一个或多个接收消息的内容;
确定检查消息所共享的特定模式;以及
将所述特定模式添加到所述特定字典。
17.根据权利要求12所述的系统,其中,所述操作还包括:
对特定消息进行编码还包括根据特定模式来压缩所述特定消息;以及
对特定消息进行解码还包括将所述特定消息重构为未压缩的。
18.根据权利要求17所述的系统,其中,根据所述特定模式来压缩所述特定消息还包括将所述顺序中与所述特定消息相邻、并且包括所述特定模式的第二消息与所述特定消息进行压缩。
19.根据权利要求11所述的系统,其中,将编码后消息存储在驻留于第一节点上的第一缓冲器中包括:
将多个编码后消息发送至所述第一节点,其中所述第一节点将多个编码后消息存储在所述第一缓冲器内的一个或多个块中的第一块中,其中各块具有相应的存活时间。
20.根据权利要求19所述的系统,其中,从所述第一缓冲器中检索编码后消息还包括在具有尚未期满的相应存活时间的一个或多个块中检索编码后消息。
21.一种制品,包括:
机器可读介质,其上存储了在由一个或多个计算机执行时使所述计算机执行包括以下各项的操作的指令:
从多个发布者客户端接收多个消息,各消息针对多个不同通道中的特定通道,其中各通道包括有顺序的多个消息;
基于特定字典来对各消息进行编码;
根据所述顺序将编码后消息存储在一个或多个相应缓冲器中,各缓冲器具有相应存活时间并且驻留在相应节点上;
从具有尚未期满的存活时间的相应缓冲器中并且根据所述顺序检索所述特定通道的编码后消息;
基于所述特定字典来对各检索消息进行解码;以及
将解码后消息发送至多个订户客户端。
22.根据权利要求21所述的制品,其中,所述特定字典包括所述特定通道的所述多个消息中的至少一些消息所共享的一个或多个模式。
23.根据权利要求22所述的制品,其中,特定模式包括文本串。
24.根据权利要求22所述的制品,其中,特定模式与所述特定通道的所述多个消息中的至少一些消息所共享的公共数据字段相对应。
25.根据权利要求22所述的制品,其中,特定模式包括特定数据类型。
26.根据权利要求22所述的制品,其中,所述操作还包括:
检查所述特定通道的一个或多个接收消息的内容;
确定检查消息所共享的特定模式;以及
将所述特定模式添加到所述特定字典。
27.根据权利要求22所述的制品,其中,所述操作还包括:
对特定消息进行编码还包括根据特定模式来压缩所述特定消息;以及
对特定消息进行解码还包括将所述特定消息重构为未压缩的。
28.根据权利要求27所述的制品,其中,根据所述特定模式来压缩所述特定消息还包括将所述顺序中与所述特定消息相邻、并且包括所述特定模式的第二消息与所述特定消息进行压缩。
29.根据权利要求21所述的制品,其中,将编码后消息存储在驻留于第一节点上的第一缓冲器中包括:
将多个编码后消息发送至所述第一节点,其中所述第一节点将多个编码后消息存储在所述第一缓冲器内的一个或多个块中的第一块中,其中各块具有相应的存活时间。
30.根据权利要求29所述的制品,其中,从所述第一缓冲器中检索编码后消息还包括在具有尚未期满的相应存活时间的一个或多个块中检索编码后消息。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/175,588 US10404647B2 (en) | 2016-06-07 | 2016-06-07 | Message compression in scalable messaging system |
US15/175,588 | 2016-06-07 | ||
PCT/US2017/035903 WO2017214016A1 (en) | 2016-06-07 | 2017-06-05 | Message compression in scalable messaging system |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109417503A true CN109417503A (zh) | 2019-03-01 |
Family
ID=59062106
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780035739.8A Pending CN109417503A (zh) | 2016-06-07 | 2017-06-05 | 可扩展消息传送系统中的消息压缩 |
Country Status (6)
Country | Link |
---|---|
US (2) | US10404647B2 (zh) |
EP (1) | EP3465991A1 (zh) |
JP (1) | JP2019521590A (zh) |
CN (1) | CN109417503A (zh) |
AU (1) | AU2017278116A1 (zh) |
WO (1) | WO2017214016A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11698891B2 (en) * | 2019-07-30 | 2023-07-11 | Salesforce.Com, Inc. | Database systems and related multichannel communication methods |
CN114900555A (zh) * | 2021-12-14 | 2022-08-12 | 合肥哈工轩辕智能科技有限公司 | 基于无损压缩算法的数据分发方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101196977A (zh) * | 2006-12-08 | 2008-06-11 | 北京华旗资讯数码科技有限公司 | 按照读取信息的顺序控制点读装置的方法 |
US9319363B1 (en) * | 2015-08-07 | 2016-04-19 | Machine Zone, Inc. | Scalable, real-time messaging system |
Family Cites Families (107)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4264924A (en) | 1978-03-03 | 1981-04-28 | Freeman Michael J | Dedicated channel interactive cable television system |
US5530645A (en) * | 1993-06-30 | 1996-06-25 | Apple Computer, Inc. | Composite dictionary compression system |
US5706331A (en) | 1995-08-22 | 1998-01-06 | Motorola, Inc. | System and method for selecting a subsystem for message traffic in an integrated communication network |
US5701302A (en) * | 1995-10-25 | 1997-12-23 | Motorola, Inc, | Method and apparatus for adaptively companding data packets in a data communication system |
US5878228A (en) | 1996-11-15 | 1999-03-02 | Northern Telecom Limited | Data transfer server with time slots scheduling base on transfer rate and predetermined data |
US5999949A (en) * | 1997-03-14 | 1999-12-07 | Crandall; Gary E. | Text file compression system utilizing word terminators |
US5982436A (en) | 1997-03-28 | 1999-11-09 | Philips Electronics North America Corp. | Method for seamless splicing in a video encoder |
US8121828B2 (en) | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
DE60040846D1 (de) | 1999-02-26 | 2009-01-02 | Henry Haugland | Massenerzeugung individualer virtueller servern, vertueller webseiten sowie virtueller webobjekten |
US7254806B1 (en) | 1999-08-30 | 2007-08-07 | Ati International Srl | Detecting reordered side-effects |
TW454120B (en) | 1999-11-11 | 2001-09-11 | Miralink Corp | Flexible remote data mirroring |
US8086672B2 (en) | 2000-06-17 | 2011-12-27 | Microsoft Corporation | When-free messaging |
US6993584B2 (en) | 2000-07-21 | 2006-01-31 | Hughes Network Systems | Method and system for improving network performance by utilizing path selection, path activation, and profiles |
US7929562B2 (en) | 2000-11-08 | 2011-04-19 | Genesis Telecommunications Laboratories, Inc. | Method and apparatus for optimizing response time to events in queue |
US6718327B1 (en) | 2001-08-31 | 2004-04-06 | Openwave Systems Inc. | Fault-tolerant queue with autonomous client operation |
US7406537B2 (en) | 2002-11-26 | 2008-07-29 | Progress Software Corporation | Dynamic subscription and message routing on a topic between publishing nodes and subscribing nodes |
US7668908B2 (en) | 2001-12-14 | 2010-02-23 | Microsoft Corporation | System and method for generalized and distributed scalable eventing system |
US7376092B2 (en) | 2002-04-03 | 2008-05-20 | Precache Inc. | Method and apparatus for implementing persistent and reliable message delivery |
US7162628B2 (en) | 2002-07-23 | 2007-01-09 | Cisco Technology, Inc. | Method, system, apparatus and program product for temporary personalization of a computer terminal |
US7720910B2 (en) * | 2002-07-26 | 2010-05-18 | International Business Machines Corporation | Interactive filtering electronic messages received from a publication/subscription service |
US8176154B2 (en) | 2002-09-30 | 2012-05-08 | Avaya Inc. | Instantaneous user initiation voice quality feedback |
WO2004036382A2 (en) | 2002-10-17 | 2004-04-29 | Tibco Software Inc. | Method and system to communicate messages in a computer network |
US7657596B2 (en) | 2002-10-24 | 2010-02-02 | Sun Microsystems, Inc. | Distributed data sharing methods and systems |
US8711923B2 (en) | 2002-12-10 | 2014-04-29 | Ol2, Inc. | System and method for selecting a video encoding format based on feedback data |
US7616208B2 (en) | 2002-12-18 | 2009-11-10 | Genesys Conferencing Ltd. | Method and system for application broadcast |
US7676580B2 (en) | 2003-03-27 | 2010-03-09 | Microsoft Corporation | Message delivery with configurable assurances and features between two endpoints |
GB0308035D0 (en) | 2003-04-08 | 2003-05-14 | Ibm | Liveness monitoring in a publish/subscribe messaging system |
EP1509049A1 (en) * | 2003-08-20 | 2005-02-23 | Accenture Global Services GmbH | Methods and systems for providing information to mobile users over limited bandwidth |
US20050047396A1 (en) | 2003-08-29 | 2005-03-03 | Helm David P. | System and method for selecting the size of dynamic voice jitter buffer for use in a packet switched communications system |
US7885901B2 (en) | 2004-01-29 | 2011-02-08 | Yahoo! Inc. | Method and system for seeding online social network contacts |
US7640357B2 (en) | 2004-04-30 | 2009-12-29 | Sap Ag | Transmitting enterprise messages based on buffer sizes |
US20050262205A1 (en) | 2004-04-30 | 2005-11-24 | Nikolov Radoslav I | Delivering messages in an enterprise messaging system using message selector hierarchy |
US7613813B2 (en) | 2004-09-10 | 2009-11-03 | Cavium Networks, Inc. | Method and apparatus for reducing host overhead in a socket server implementation |
US8065384B2 (en) | 2004-10-08 | 2011-11-22 | Sharp Laboratories Of America, Inc. | Methods and systems for imaging device event notification subscription |
US8051140B2 (en) | 2004-10-08 | 2011-11-01 | Sharp Laboratories Of America, Inc. | Methods and systems for imaging device control |
US7774720B1 (en) * | 2004-10-15 | 2010-08-10 | Oracle America, Inc. | Connectivity map editor |
US20060106840A1 (en) | 2004-11-04 | 2006-05-18 | International Business Machines Corporation | System and method for tracking notifications in a publish subscribe system |
US7779418B2 (en) | 2004-12-30 | 2010-08-17 | Oracle International Corporation | Publisher flow control and bounded guaranteed delivery for message queues |
JP2008527538A (ja) | 2005-01-06 | 2008-07-24 | テーベラ・インコーポレーテッド | メッセージング・システム内のキャッシング・エンジン |
US7706895B2 (en) * | 2005-02-25 | 2010-04-27 | Rockwell Automation Technologies, Inc. | Reliable messaging instruction |
US8788565B2 (en) | 2005-07-18 | 2014-07-22 | Wayne Bevan | Dynamic and distributed queueing and processing system |
US7941448B2 (en) | 2005-08-26 | 2011-05-10 | At&T Intellectual Property Ii, Lp | System and method for event driven publish-subscribe communications |
US7917124B2 (en) | 2005-09-20 | 2011-03-29 | Accenture Global Services Limited | Third party access gateway for telecommunications services |
WO2007063585A1 (ja) | 2005-11-30 | 2007-06-07 | Fujitsu Limited | 通信装置およびフレーム制御方法 |
US8965409B2 (en) | 2006-03-17 | 2015-02-24 | Fatdoor, Inc. | User-generated community publication in an online neighborhood social network |
WO2007109087A2 (en) * | 2006-03-18 | 2007-09-27 | Lankford, Peter | System and method for integration of streaming and static data |
JP2009540717A (ja) | 2006-06-12 | 2009-11-19 | クラウドソフト コーポレーション リミテッド | 自己管理型分散メディエーションネットワーク |
US8429702B2 (en) | 2006-09-11 | 2013-04-23 | At&T Intellectual Property I, L.P. | Methods and apparatus for selecting and pushing customized electronic media content |
US9270944B2 (en) | 2007-02-14 | 2016-02-23 | Time Warner Cable Enterprises Llc | Methods and apparatus for content delivery notification and management |
US8396959B2 (en) | 2007-03-21 | 2013-03-12 | Inetco Systems Limited | Method and system for monitoring messages passed over a network |
US8145704B2 (en) | 2007-06-13 | 2012-03-27 | Ntech Properties, Inc. | Method and system for providing media programming |
US8799213B2 (en) | 2007-07-31 | 2014-08-05 | Oracle International Corporation | Combining capture and apply in a distributed information sharing system |
US9224150B2 (en) | 2007-12-18 | 2015-12-29 | Napo Enterprises, Llc | Identifying highly valued recommendations of users in a media recommendation network |
US8234193B2 (en) | 2008-03-03 | 2012-07-31 | Wildfire Interactive, Inc. | Method and system for providing online promotions through a social network-based platform |
US8452833B2 (en) | 2008-05-13 | 2013-05-28 | International Business Machines Corporation | Cached message distribution via HTTP redirects |
US8898293B2 (en) | 2009-01-28 | 2014-11-25 | Headwater Partners I Llc | Service offer set publishing to device agent with on-device service selection |
US8539359B2 (en) | 2009-02-11 | 2013-09-17 | Jeffrey A. Rapaport | Social network driven indexing system for instantly clustering people with concurrent focus on same topic into on-topic chat rooms and/or for generating on-topic search results tailored to user preferences regarding topic |
US8301687B2 (en) * | 2009-03-31 | 2012-10-30 | Software Ag | Systems and/or methods for standards-based messaging |
US20130254314A1 (en) | 2009-06-09 | 2013-09-26 | Edmond K. Chow | Digital content delivery |
US8392555B2 (en) | 2009-06-01 | 2013-03-05 | International Business Machines Corporation | Push-back mechanism for pub/sub brokers |
US20110060812A1 (en) | 2009-09-10 | 2011-03-10 | Level 3 Communications, Llc | Cache server with extensible programming framework |
US8375095B2 (en) | 2009-12-22 | 2013-02-12 | Microsoft Corporation | Out of order durable message processing |
US9021046B2 (en) | 2010-01-15 | 2015-04-28 | Joyent, Inc | Provisioning server resources in a cloud resource |
JP5340186B2 (ja) | 2010-01-21 | 2013-11-13 | アラクサラネットワークス株式会社 | パケット中継装置及びパケットを中継する方法 |
US8850015B2 (en) | 2010-01-26 | 2014-09-30 | Cisco Technology, Inc. | Network-network interface |
US8489674B2 (en) | 2010-03-11 | 2013-07-16 | Yahoo! Inc. | Distributed publish/subscribe system |
US9338064B2 (en) | 2010-06-23 | 2016-05-10 | Twilio, Inc. | System and method for managing a computing cluster |
US8626778B2 (en) * | 2010-07-23 | 2014-01-07 | Oracle International Corporation | System and method for conversion of JMS message data into database transactions for application to multiple heterogeneous databases |
US8441965B2 (en) | 2010-08-05 | 2013-05-14 | Apple Inc. | Methods and apparatus for reducing data transmission overhead |
US8589732B2 (en) | 2010-10-25 | 2013-11-19 | Microsoft Corporation | Consistent messaging with replication |
CN102469032B (zh) | 2010-10-29 | 2015-03-25 | 国际商业机器公司 | 发布-订阅消息传递的方法和系统 |
WO2012078971A2 (en) | 2010-12-10 | 2012-06-14 | Rockefeller Consulting Technology Integration, Inc. | Systems and methods for integrating personal social networks within an organization |
US20120150960A1 (en) | 2010-12-13 | 2012-06-14 | Gargi Nalawade | Social Networking |
US20120278728A1 (en) | 2011-04-29 | 2012-11-01 | Sling Media Inc. | Download monitoring in a media distribution system |
US8719876B2 (en) | 2011-05-06 | 2014-05-06 | Verizon Patent And Licensing Inc. | Video on demand architecture |
US8886731B2 (en) | 2011-06-01 | 2014-11-11 | Microsoft Corporation | Decentralized relaying algorithm for mobile devices |
US20130031216A1 (en) | 2011-07-29 | 2013-01-31 | Myxer, Inc. | Systems and methods for generation of customized media playlists |
US9177336B2 (en) | 2011-09-08 | 2015-11-03 | Telefonaktiebolaget L M Ericsson (Publ) | Apparatuses and methods for recommending a path through an information space |
US20130066967A1 (en) | 2011-09-12 | 2013-03-14 | Vizibility Inc. | System and method for discovering and interacting with common connections |
US20130212491A1 (en) | 2011-09-12 | 2013-08-15 | Gface Gmbh | Computer-implemented method for displaying an individual timeline of a user of a social network, computer system and computer-readable medium thereof |
US8607249B2 (en) | 2011-09-22 | 2013-12-10 | Oracle International Corporation | System and method for efficient concurrent queue implementation |
KR102024182B1 (ko) | 2011-11-18 | 2019-09-24 | 톰슨 라이센싱 | 엔드-유저 디바이스들의 원격 관리를 위한 발행/구독 브로커를 포함하는 시스템 및 각각의 엔드-유저 디바이스 |
EP3249546B1 (en) | 2011-12-14 | 2022-02-09 | Level 3 Communications, LLC | Content delivery network |
WO2013095654A1 (en) | 2011-12-23 | 2013-06-27 | Intel Corporation | Shared send queue |
US20130290449A1 (en) | 2012-04-25 | 2013-10-31 | Origami Labs, Inc. | Privacy-based social content broadcast systems and methods |
BR112014004057A2 (pt) | 2012-07-02 | 2017-03-07 | Sony Corp | dispositivo e método de transmissão, e, aparelho de rede |
US20140114738A1 (en) | 2012-10-24 | 2014-04-24 | Erick Tseng | Automatic Check-In Using Social-Networking Information |
US20140237057A1 (en) | 2013-02-21 | 2014-08-21 | Genesys Telecommunications Laboratories, Inc. | System and method for processing private messages in a contact center |
US8850490B1 (en) | 2013-05-07 | 2014-09-30 | Google Inc. | Consuming paid media in an internet-based content platform |
US9767138B2 (en) | 2013-06-12 | 2017-09-19 | Oracle International Corporation | In-database sharded queue for a shared-disk database |
US8824664B1 (en) | 2013-06-13 | 2014-09-02 | Genesys Telecommunications Laboratories, Inc. | System and method for controlling lifespan of interaction requests |
US9342554B2 (en) | 2013-07-05 | 2016-05-17 | Facebook, Inc. | Techniques to generate mass push notifications |
US9813515B2 (en) | 2013-10-04 | 2017-11-07 | Akamai Technologies, Inc. | Systems and methods for caching content with notification-based invalidation with extension to clients |
US9729653B2 (en) | 2014-01-23 | 2017-08-08 | Software Ag | Systems and/or methods for automatically tuning a delivery system for transmission of large, volatile data |
US20150262151A1 (en) | 2014-03-11 | 2015-09-17 | Nibl, Inc. | Access Control System for Online Content |
US9450895B2 (en) | 2014-03-28 | 2016-09-20 | Futurewei Technologies, Inc. | Context-aware dynamic policy selection for messaging behavior |
US20150317676A1 (en) | 2014-05-01 | 2015-11-05 | Vibe-It LLC | Systems and methods for monitoring and responding to customer feedback |
US20150379160A1 (en) | 2014-06-29 | 2015-12-31 | Yaniv AVRAHAM | Apparatus and methods for transferring focus control and related return content within a graphical user interface |
US10033784B2 (en) | 2014-07-14 | 2018-07-24 | International Business Machines Corporation | Predictive management of offline storage content for mobile applications and optimized network usage for mobile devices |
US20160219089A1 (en) | 2015-01-23 | 2016-07-28 | Ebay Inc. | Systems and methods for messaging and processing high volume data over networks |
US9742651B2 (en) | 2015-03-05 | 2017-08-22 | International Business Machines Corporation | Client-side fault tolerance in a publish-subscribe system |
US10432741B2 (en) | 2015-03-25 | 2019-10-01 | Open Access Technology International, Inc. | Systems and methods for guaranteeing delivery of pushed data to remote clients |
US9407585B1 (en) | 2015-08-07 | 2016-08-02 | Machine Zone, Inc. | Scalable, real-time messaging system |
US9385976B1 (en) | 2015-10-09 | 2016-07-05 | Machine Zone, Inc. | Systems and methods for storing message data |
US9319365B1 (en) * | 2015-10-09 | 2016-04-19 | Machine Zone, Inc. | Systems and methods for storing and transferring message data |
-
2016
- 2016-06-07 US US15/175,588 patent/US10404647B2/en not_active Expired - Fee Related
-
2017
- 2017-06-05 AU AU2017278116A patent/AU2017278116A1/en not_active Abandoned
- 2017-06-05 EP EP17730325.2A patent/EP3465991A1/en not_active Withdrawn
- 2017-06-05 CN CN201780035739.8A patent/CN109417503A/zh active Pending
- 2017-06-05 JP JP2018563851A patent/JP2019521590A/ja active Pending
- 2017-06-05 WO PCT/US2017/035903 patent/WO2017214016A1/en unknown
-
2019
- 2019-08-14 US US16/540,586 patent/US20190372927A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101196977A (zh) * | 2006-12-08 | 2008-06-11 | 北京华旗资讯数码科技有限公司 | 按照读取信息的顺序控制点读装置的方法 |
US9319363B1 (en) * | 2015-08-07 | 2016-04-19 | Machine Zone, Inc. | Scalable, real-time messaging system |
Non-Patent Citations (1)
Title |
---|
PEER HEINLEIN: "zlib compression on zhe fly:faster and more space-saving", 《DOVECOT》 * |
Also Published As
Publication number | Publication date |
---|---|
US20170353424A1 (en) | 2017-12-07 |
AU2017278116A1 (en) | 2018-12-06 |
US10404647B2 (en) | 2019-09-03 |
EP3465991A1 (en) | 2019-04-10 |
WO2017214016A8 (en) | 2018-11-15 |
JP2019521590A (ja) | 2019-07-25 |
US20190372927A1 (en) | 2019-12-05 |
WO2017214016A1 (en) | 2017-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109479025A (zh) | 维护消息传送系统的持久性 | |
CN108141404A (zh) | 可扩展的实时消息传递系统 | |
CN110121863A (zh) | 用于向多个订户提供消息的系统和方法 | |
CN107852428A (zh) | 可扩展的实时消息传递系统 | |
CN109691035A (zh) | 消息传送系统的多速消息通道 | |
CN102362269B (zh) | 实时内核 | |
CN108370346A (zh) | 用于存储和传送消息数据的系统和方法 | |
CN108353020A (zh) | 用于传送消息数据的系统和方法 | |
CN108028796A (zh) | 可扩展的实时消息传递系统 | |
CN108370345A (zh) | 用于存储消息数据的系统和方法 | |
JP2013257798A (ja) | データ収集システムおよびデータ収集方法 | |
CN110139114A (zh) | 虚拟资产数据的处理方法、装置、计算机设备和存储介质 | |
CN109417503A (zh) | 可扩展消息传送系统中的消息压缩 | |
WO2022183518A1 (zh) | 一种面向云计算的高性能区块链架构方法 | |
CN109644155A (zh) | 可扩展消息传送系统中的数据复制 | |
CN112182108A (zh) | 基于区块链的分布式数据存储更新方法和电子设备 | |
CN109964456A (zh) | 可扩展实时消息传送系统 | |
CN117355834A (zh) | 使用隐私信息检索和安全多方计算的隐私安全批量检索 | |
US20220182153A1 (en) | Classical implementation of entanglement | |
US12026921B2 (en) | Systems and method for low bandwidth video-chat compression | |
US20220156981A1 (en) | Systems and method for low bandwidth video-chat compression | |
JP2019519841A (ja) | 効率的メッセージ交換システム | |
Dominguez et al. | Intermedia synchronization protocol for continuous media using MPEG-4 in mobile distributed systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190301 |
|
WD01 | Invention patent application deemed withdrawn after publication |