IP Library Granted Patent US 9,667,681
Granted Patent B1
US 9,667,681 · App. 15/274,281 · Granted May 30, 2017

Systems and methods for providing messages to multiple subscribers

Inventor: Igor Milyakov (Sunnyvale, CA)
Assignee: Machine Zone, Inc.
H04L65/4076H04L67/2842H04L69/16
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,667,681
App. No.
15/274,281
Granted
May 30, 2017
Kind
B1
Abstract

Methods, systems, and apparatus, including computer programs encoded on a computer storage device, for: receiving messages from a plurality of publishers; assigning each of the messages to one of a plurality of channels, wherein each channel comprises an ordered plurality of messages; storing messages of each of the channels in respective storage buffers according to the order, wherein each storage buffer comprises a respective time-to-live of a first time duration; for a particular channel, retrieving messages of the particular channel from respective storage buffers; storing the retrieved messages of the particular channel in a delivery buffer, the delivery buffer comprising data blocks, wherein each data block comprises a respective time-to-live of a second time duration; and providing the messages stored in the delivery buffer to a plurality of subscribers of the particular channel.

Claims (59)

1. A computer-implemented method, comprising:

receiving a plurality of messages from a plurality of publishers;

assigning each of the messages to one of a plurality of channels, wherein each channel comprises an ordered plurality of messages;

storing messages of each of the channels in one or more respective storage buffers according to the order, wherein each storage buffer comprises a respective time-to-live of a first time duration;

for a particular channel, retrieving messages of the particular channel from respective storage buffers;

storing the retrieved messages of the particular channel in a delivery buffer according to the order, the delivery buffer comprising one or more data blocks, wherein each data block comprises a respective time-to-live of a second time duration; and

providing the messages stored in the delivery buffer to a plurality of subscribers of the particular channel.

2. The method of claim 1 , wherein providing the messages stored in the delivery buffer to the plurality of subscribers of the particular channel further comprises:

determining a connection status of a particular subscriber; and

based thereon, providing one or more of the messages stored in the delivery buffer to the particular subscriber.

3. The method of claim 1 , wherein storing the retrieved messages of the particular channel in the delivery buffer comprises:

storing retrieved messages of the particular channel earlier in the order in data blocks having times-to-live that will expire sooner than data blocks used to store retrieved messages of the particular channel later in the order.

4. The method of claim 1 , wherein the delivery buffer comprises a linked list of the data blocks, wherein retrieved messages last in the order of the particular channel are stored in a tail data block of the linked list.

5. The method of claim 1 , wherein:

the delivery buffer resides on a first computing node; and

the messages stored in the delivery buffer are provided to each of the plurality of subscribers through a respective computing process residing on the first computing node.

6. The method of claim 1 , wherein the delivery buffer comprises a visible area and an invisible area.

7. The method of claim 2 , further comprising:

determining that the particular subscriber has a pre-existing connection to the particular channel; and

based thereon, providing to the particular subscriber one or more messages stored in the delivery buffer including messages stored in one or more data blocks having respective times-to-live that have expired.

8. The method of claim 2 , further comprising:

determining that the particular subscriber has a new connection to the particular channel, and, based thereon;

(i) providing to the particular subscriber one or more messages stored in one or more of the data blocks having respective times-to-live that have not expired; and

(ii) preventing the particular subscriber from receiving one or more messages stored in one or more data blocks having respective times-to-live that have expired.

9. The method of claim 4 , wherein storing the retrieved messages of the particular channel in the delivery buffer further comprises:

removing from the linked list one or more data blocks at a head of the linked list, wherein the removed data blocks comprise respective times-to-live that have expired.

10. The method of claim 5 , wherein the storage buffers reside on respective second computing nodes that are different from the first computing node.

11. The method of claim 6 , wherein a subscriber with a pre-existing connection is permitted to access data from both the visible area and the invisible area.

12. The method of claim 6 , wherein a subscriber with a new connection is permitted to access data from the visible area and not permitted to access data from the invisible area.

13. A system, comprising:

one or more computers programmed to perform operations comprising:

receiving a plurality of messages from a plurality of publishers;

assigning each of the messages to one of a plurality of channels, wherein each channel comprises an ordered plurality of messages;

storing messages of each of the channels in one or more respective storage buffers according to the order, wherein each storage buffer comprises a respective time-to-live of a first time duration;

for a particular channel, retrieving messages of the particular channel from respective storage buffers;

storing the retrieved messages of the particular channel in a delivery buffer according to the order, the delivery buffer comprising one or more data blocks, wherein each data block comprises a respective time-to-live of a second time duration; and

providing the messages stored in the delivery buffer to a plurality of subscribers of the particular channel.

14. The system of claim 13 , wherein providing the messages stored in the delivery buffer to the plurality of subscribers of the particular channel further comprises:

determining a connection status of a particular subscriber; and

based thereon, providing one or more of the messages stored in the delivery buffer to the particular subscriber.

15. The system of claim 13 , wherein storing the retrieved messages of the particular channel in the delivery buffer comprises:

storing retrieved messages of the particular channel earlier in the order in data blocks having times-to-live that will expire sooner than data blocks used to store retrieved messages of the particular channel later in the order.

16. The system of claim 13 , wherein the delivery buffer comprises a linked list of the data blocks, wherein retrieved messages last in the order of the particular channel are stored in a tail data block of the linked list.

17. The system of claim 16 , wherein storing the retrieved messages of the particular channel in the delivery buffer further comprises:

removing from the linked list one or more data blocks at a head of the linked list, wherein the removed data blocks comprise respective times-to-live that have expired.

18. The system of claim 14 , further comprising:

determining that the particular subscriber has a pre-existing connection to the particular channel; and

based thereon, providing to the particular subscriber one or more messages stored in the delivery buffer including messages stored in one or more data blocks having respective times-to-live that have expired.

19. The system of claim 14 , further comprising:

determining that the particular subscriber has a new connection to the particular channel, and, based thereon:

(i) providing to the particular subscriber one or more messages stored in one or more of the data blocks having respective times-to-live that have not expired; and

(ii) preventing the particular subscriber from receiving one or more messages stored in one or more data blocks having respective times-to-live that have expired.

20. A non-transitory computer-readable storage device having instructions stored thereon that, when executed by one or more computers, cause the computers to perform operations comprising:

receiving a plurality of messages from a plurality of publishers;

assigning each of the messages to one of a plurality of channels, wherein each channel comprises an ordered plurality of messages;

storing messages of each of the channels in one or more respective storage buffers according to the order, wherein each storage buffer comprises a respective time-to-live of a first time duration;

for a particular channel, retrieving messages of the particular channel from respective storage buffers;

storing the retrieved messages of the particular channel in a delivery buffer according to the order, the delivery buffer comprising one or more data blocks, wherein each data block comprises a respective time-to-live of a second time duration; and

providing the messages stored in the delivery buffer to a plurality of subscribers of the particular channel.

Assignments (6)
RELEASE OF SECURITY INTEREST Recorded May 19, 2020
From: COMERICA BANK
To: SATORI WORLDWIDE, LLC
Reel/Frame 052707/0769 →
RELEASE OF SECURITY INTEREST Recorded May 19, 2020
From: MGG INVESTMENT GROUP LP, AS COLLATERAL AGENT
To: MACHINE ZONE, INC.; SATORI WORLDWIDE, LLC; COGNANT LLC
Reel/Frame 052706/0917 →
SECURITY INTEREST Recorded May 22, 2018
From: SATORI WORLDWIDE, LLC
To: COMERICA BANK
Reel/Frame 046215/0159 →
NOTICE OF SECURITY INTEREST -- PATENTS Recorded Feb 2, 2018
From: MACHINE ZONE, INC.; SATORI WORLDWIDE, LLC; COGNANT LLC
To: MGG INVESTMENT GROUP LP, AS COLLATERAL AGENT
Reel/Frame 045237/0861 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 13, 2017
From: MACHINE ZONE, INC.
To: SATORI WORLDWIDE, LLC
Reel/Frame 044428/0652 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 25, 2016
From: MILYAKOV, IGOR
To: MACHINE ZONE, INC.
Reel/Frame 040120/0196 →