KR20210090612A - 이벤트 콘텐츠 전달 - Google Patents

이벤트 콘텐츠 전달 Download PDF

Info

Publication number
KR20210090612A
KR20210090612A KR1020217009085A KR20217009085A KR20210090612A KR 20210090612 A KR20210090612 A KR 20210090612A KR 1020217009085 A KR1020217009085 A KR 1020217009085A KR 20217009085 A KR20217009085 A KR 20217009085A KR 20210090612 A KR20210090612 A KR 20210090612A
Authority
KR
South Korea
Prior art keywords
event
topic
subscription
client devices
channel
Prior art date
Application number
KR1020217009085A
Other languages
English (en)
Other versions
KR102445806B1 (ko
Inventor
지에 진
더스틴 노랜더
Original Assignee
트위터, 인크.
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 트위터, 인크. filed Critical 트위터, 인크.
Publication of KR20210090612A publication Critical patent/KR20210090612A/ko
Application granted granted Critical
Publication of KR102445806B1 publication Critical patent/KR102445806B1/ko

Links

Images

Classifications

    • H04L67/327
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/30Profiles
    • H04L67/303Terminal profiles
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/70Admission control; Resource allocation
    • H04L47/82Miscellaneous aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1031Controlling of the operation of servers by a load balancer, e.g. adding or removing servers that serve requests
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/146Markers for unambiguous identification of a particular session, e.g. session cookie or URL-encoding
    • H04L67/24
    • H04L67/2842
    • H04L67/325
    • H04L67/42
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/54Presence management, e.g. monitoring or registration for receipt of user log-on information, or the connection status of the users
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/55Push-based network services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/62Establishing a time schedule for servicing the requests
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/63Routing a service request depending on the request content or context
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/28Timers or timing mechanisms used in protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Transfer Between Computers (AREA)
  • Medicines Containing Material From Animals Or Micro-Organisms (AREA)

Abstract

이벤트 콘텐츠를 전달하기 위한, 컴퓨터 저장 매체 상에 인코딩된 컴퓨터 프로그램들을 포함하는 방법들, 시스템들, 및 장치들이 개시된다. 방법들 중 하나는 하나 이상의 클라이언트 디바이스에 대해, 토픽에 대한 구독을 개시하는 단계; 토픽에 관련된 이벤트를 수신하는 단계; 토픽에 대응하는 채널 서버들의 수를 결정하는 단계 - 각각의 채널 서버는 하나 이상의 클라이언트 디바이스와 연관됨 - ; 토픽에 대응하는 채널 서버들의 수가 채널 서버들의 임계 수보다 크다고 결정하는 단계; 토픽에 대응하는 채널 서버들의 수가 채널 서버들의 임계 수보다 크다는 결정에 응답하여, 이벤트 프로세서로부터의 수신된 이벤트를 이벤트 팬-아웃 큐에 기입하는 단계; 이벤트 팬아웃 큐로부터 수신된 이벤트를 판독하는 단계; 및 수신된 이벤트를 각자의 채널 서버 각각과 연관된 하나 이상의 클라이언트 디바이스에 전송하는 단계를 포함한다.

Description

이벤트 콘텐츠 전달
본 명세서는 이벤트 콘텐츠를 하나 이상의 사용자 디바이스에 제공하는 것에 관한 것이다.
종래의 요청-응답 모델(request-response model)은 제1 컴퓨팅 디바이스가 정보에 대한 요청을 제2 컴퓨팅 디바이스에 전송한 다음, 제2 컴퓨팅 디바이스로부터 그 요청에 대한 응답을 수신하는 것을 포함한다.
대조적으로, 종래의 토픽-기반 발행-구독 모델(topic-based publish-subscribe model)에서, 컴퓨팅 디바이스들의 사용자들은 특정 토픽을 구독할 수 있다. 그 토픽에 대해 발행된 콘텐츠는 그 토픽을 구독한 모든 사용자에게 제공된다. 예를 들어, 구독은 토픽과 연관된 것으로서 식별된 메시지들을 토픽을 구독한 각각의 컴퓨팅 디바이스에 전송하도록 구성되는 서버에 의해 호스팅될 수 있다. 일단 토픽을 구독하면, 컴퓨팅 디바이스는 전형적으로 서버에 대한 개별 요청들을 수행하지 않고 진행중인 구독 콘텐츠를 수신한다.
본 명세서는 토픽을 구독하고 그 토픽에 관련된 콘텐츠를 수신하기 위한 기술들을 설명한다.
이러한 기술들은 일반적으로 사용자들로부터 구독 요청들을 수신하는 시스템에 관한 것이다. 각각의 구독 요청은 사용자가 그에 관한 정보를 수신하기를 원하는 토픽을 식별한다. 구독 요청에 응답하여, 시스템은 시스템의 채널 서버에 의해 호스팅되는 토픽에 대한 구독 세션을 개시한다. 구독 세션은 사용자가 구독 요청을 하는 데 사용한 클라이언트에 고유하다. 채널 서버는 이벤트라고 하는 토픽에 관련된 특별히 정의된 정보(particularly defined information)를 클라이언트에 전송한다.
토픽에 대한 이벤트가 수신되면, 토픽에 대한 구독들을 호스팅하는 채널 서버들에 대응하는 하나 이상의 이벤트 큐(event queue)에 이벤트 정보가 추가된다. 시스템이 동일한 토픽에 대한 구독들을 호스팅하는 채널 서버들의 수가 임계값을 초과한다고 결정하는 경우, 개별 이벤트 큐들에 대한 이벤트 정보의 과도한 기입을 제한하기 위해 팬-아웃 큐(fan-out queue)가 사용된다. 특히, 팬-아웃 큐에 기입된 이벤트들은 토픽에 대한 구독들을 호스팅하는 모든 채널 서버들에 제공될 수 있다. 예를 들어, 채널 서버들은 이벤트들을 획득하기 위해 팬-아웃 큐로부터 주기적으로 판독할 수 있다.
일반적으로, 본 명세서에 설명된 주제의 하나의 혁신적인 양태는, 하나 이상의 클라이언트 디바이스 각각에 대해, 토픽에 대한 구독을 개시하는 것; 이벤트 프로세서 상에서, 토픽에 관련된 이벤트를 수신하는 것; 토픽을 핸들링하고 있는 채널 서버들의 수를 결정하는 것 - 각각의 채널 서버는 하나 이상의 클라이언트 디바이스에 의해 구독된 토픽들을 핸들링함 - ; 토픽을 핸들링하고 있는 채널 서버들의 수가 채널 서버들의 임계 수보다 크다고 결정하는 것; 토픽에 대응하는 채널 서버들의 수가 채널 서버들의 임계 수보다 크다는 결정에 응답하여, 이벤트 프로세서로부터의 수신된 이벤트를 이벤트 팬-아웃 큐에 기입하는 것; 채널 서버들에 의해, 이벤트 팬-아웃 큐로부터 수신된 이벤트를 판독하는 것; 및 토픽을 핸들링하고 있는 각자의 채널 서버 각각으로부터의 수신된 이벤트를 토픽을 구독한 하나 이상의 클라이언트 디바이스에 전송하는 것의 액션들을 포함하는 방법들로 구현될 수 있다.
이 양태의 다른 실시예들은, 각각이 방법들의 액션들을 수행하도록 구성되는, 대응하는 컴퓨터 시스템들, 장치들, 및 하나 이상의 컴퓨터 저장 디바이스 상에 기록된 컴퓨터 프로그램들을 포함한다. 하나 이상의 컴퓨터의 시스템이 특정 동작들 또는 액션들을 수행하도록 구성되는 것은, 시스템이 동작시 시스템으로 하여금 동작들 또는 액션들을 수행하게 하는 그의 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합에 설치된 것을 의미한다. 하나 이상의 컴퓨터 프로그램이 특정 동작들 또는 액션들을 수행하도록 구성되는 것은, 하나 이상의 프로그램이, 데이터 처리 장치에 의해 실행될 때, 그 장치로 하여금 동작들 또는 액션들을 수행하게 하는 명령어들을 포함하는 것을 의미한다.
전술한 및 다른 실시예들은 각각 다음의 특징들 중 하나 이상을, 단독으로 또는 조합하여, 임의로 포함할 수 있다. 특히, 일 실시예는 다음의 특징들 전부를 조합하여 포함한다. 하나 이상의 클라이언트 디바이스 각각에 대해, 토픽에 대한 구독을 개시하는 것은: 하나 이상의 클라이언트 디바이스 각각으로부터, 하나 이상의 클라이언트 디바이스로부터의 하나 이상의 구독 요청을 수신하는 것 - 하나 이상의 구독 요청은 토픽을 포함함 - ; 및 하나 이상의 수신된 구독 요청에 응답하여 하나 이상의 클라이언트 디바이스에 대해 토픽에 대한 하나 이상의 구독을 개시하는 것 - 이는 각각의 개시된 구독에 대해, 클라이언트 디바이스와 연관된 세션 식별자들을 토픽들에 대한 세션 식별자들의 맵핑에 추가하는 것을 포함함 - 을 포함한다.
구독을 개시하는 것은 구성 패킷을 클라이언트 디바이스에 전송하는 것을 포함하고, 구성 패킷은 클라이언트 디바이스에 고유한 하나 이상의 구독 타이머를 포함한다. 하나 이상의 구독 타이머는 클라이언트 디바이스와 연관된 사용자가 유휴인 것을 나타내고, 유휴인 것은 사용자가 임계 시간량보다 많이 자신의 클라이언트 디바이스와 상호작용하지 않는 것을 포함할 수 있다. 결정된 수의 채널 서버들로부터의 수신된 이벤트를 각자의 채널 서버 각각과 연관된 하나 이상의 클라이언트 디바이스에 전송하는 것은: 하나 이상의 클라이언트 디바이스가 유휴가 아니라고 결정하는 것; 및 결정된 수의 채널 서버들로부터의 수신된 이벤트를 각자의 채널 서버 각각과 연관된 하나 이상의 클라이언트 디바이스에 전송하는 것을 추가로 포함한다. 이 방법은 하나 이상의 클라이언트 디바이스가 유휴라고 결정하는 것; 및 하나 이상의 유휴 클라이언트 디바이스로부터 하나 이상의 채널 서버를 분리시키는 것을 추가로 포함한다. 이 방법은 하나 이상의 클라이언트 디바이스가 더 이상 유휴가 아니라고 결정하는 것; 및 하나 이상의 클라이언트 디바이스와 하나 이상의 채널 서버를 재연관시키는 것을 추가로 포함한다. 하나 이상의 구독 요청은 방송과 관련된 하나 이상의 참여(engagement)를 수신하기 위한 요청들이고, 하나 이상의 참여는 좋아요(likes) 및 재방송(rebroadcasts)을 포함하며, 토픽은 방송과 관련된 정보를 포함할 수 있다. 하나 이상의 구독 요청은 하나 이상의 참여자와의 대화와 관련된 하나 이상의 참여를 수신하기 위한 요청들이고, 참여들은 참여자들 중 하나 이상이 메시지를 구성하고 있다는 표시를 포함하며, 토픽은 대화와 관련된 정보를 포함할 수 있다.
본 명세서에서 설명된 주제는 다음과 같은 장점들 중 하나 이상을 실현하기 위해 특정 실시예들에서 구현될 수 있다.
개시된 시스템들 및 방법들은, 예를 들어, 요청-응답 모델에 의해 요구되는 바와 같이, 클라이언트의 디바이스가 데이터에 대한 다수의 요청을 전송할 필요 없이 클라이언트가 관련 데이터를 수신할 수 있게 한다. 따라서, 주제는 요청-응답 모델을 사용하는 시스템에 비해 컴퓨팅 자원 및 네트워크 사용의 감소를 특징으로 한다.
시스템들 및 방법들은 특정 구독된 토픽에 관한 이벤트들을 많은 개별 큐들에 기입하는 중복성(redundancy)을 제한하기 위해 지정된 기준 하에서 이벤트 팬-아웃 큐를 사용하여 이벤트들의 효율적인 분배를 가능하게 한다. 다수의 채널 서버들과 연관된 이벤트들에 대해 단일 이벤트 팬-아웃 큐를 사용하는 것은, 이벤트 프로세서가 단일 이벤트 팬-아웃 큐에 기입할 수 있게 함으로써 개별 채널 서버 이벤트 큐들에 대한 기입 동작들의 수를 감소시킨다. 따라서, 이벤트는 각각이 다수의 호스팅된 클라이언트에 이벤트를 전송할 수 있는 다수의 채널 서버로 팬-아웃할 수 있다. 그 결과, 이벤트는, 예를 들어, 수백만의 구독된 클라이언트에게 동시에 전달될 수 있다. 비활성인 것으로 결정하고 있는 사용자의 구독을 유지하는 것을 피하기 위해, 시스템은 각각의 구독에 대해 TTL(time to live)을 부과할 수 있다. 이것은 시스템이 비활성인 것으로 결정되는 사용자들의 구독들을 종료하여 활성 사용자들에 대한 컴퓨팅 자원들을 보존할 수 있게 한다.
도 1은 클라이언트와 통신가능하게 결합된 예시적인 메시징 플랫폼의 블록도이다.
도 2는 클라이언트와 통신가능하게 결합된 예시적인 구독 모듈의 블록도이다.
도 3은 구독 모듈을 구독한 클라이언트에 이벤트를 전송하는 예시적인 프로세스의 흐름도이다.
다양한 도면들에서 비슷한 참조 번호들 및 지정들은 비슷한 요소들을 나타낸다.
많은 모바일 디바이스들에 대한 네트워크 활동은 요청-응답 모델에 기초한다. 그러나, 특정 타입들의 활동은 요청-응답 모델에 의해 잘 서비스되지 않는다. 예를 들어, 메시징 플랫폼은, 다른 사용자가, 예를 들어, 제1 사용자와 제2 사용자 사이의 대화의 일부로서, 메시지를 타이핑하고 있다는 것을 나타내는 클라이언트 디바이스들에 제공되는 경보(alert)를 포함할 수 있다. 그러나, 요청-응답 모델을 사용할 때, 제1 사용자의 컴퓨팅 디바이스는 제2 사용자가 타이핑하고 있는지를 "질문(ask)"하기 위해 메시징 플랫폼에 계속해서 요청들을 전송해야 할 것이다. 결국, 메시징 플랫폼은 또한 수신된 모든 요청에 대해 응답을 전송해야 할 것이다.
요청들 및 응답들을 계속해서 전송하는 것은, 컴퓨팅 디바이스의 CPU에 의한 상당한 양의 계산을 필요로 할 수 있다. 이 때문에, 사용자는 배터리 수명의 감소, 데이터 사용의 증가, 및 컴퓨팅 디바이스의 속도의 감소를 경험할 수 있다.
이러한 효과들 중 일부는 발행-구독 모델(publish-subscribe model)을 사용하여 완화될 수 있다. 그러나, 메시징 시스템의 경우 대량의 이벤트들 및 구독자들에 대한 이벤트 보급(event dissemination)을 스케일링(scaling)하는 것은 다른 도전과제들을 도입할 수 있다.
본 명세서는 요청-응답 및 종래의 발행-구독 모델들의 단점들 없이 적시에 특정 이벤트들에 관한 정보를 제공하기 위한 기법들을 설명한다.
도 1은 많은 클라이언트 디바이스들, 예를 들어, 클라이언트 디바이스(102)와 통신가능하게 결합된 예시적인 메시징 플랫폼(100)의 블록도이다. 메시징 플랫폼은 메시징 시스템(110), 구독 시스템(subscription system)(120), 연결 그래프 리포지토리(connection graph repository)(132), 및 계정 리포지토리(account repository)(134)를 포함한다.
메시징 플랫폼(100)은, 예를 들어, 계정 리포지토리(134)를 사용하여, 개인, 기업, 및/또는 다른 엔티티들의 수백만 개의 계정, 예를 들어, 가명 계정(pseudonym account), 노블티 계정(novelty account) 등을 저장할 수 있다.
클라이언트들은 메시징 플랫폼을 사용하여 메시징 플랫폼의 내부 및/또는 외부의 다른 계정들로 메시지들을 전송할 수 있다. 일부 구현들에서, 메시징 플랫폼은 클라이언트들이 "실시간"으로 통신할 수 있게 하도록, 즉, 최소의 지연으로 다른 클라이언트들과 대화할 수 있게 하고 동시 세션들 동안 하나 이상의 다른 클라이언트와 대화를 수행할 수 있게 하도록 구성될 수 있다.
메시징 시스템은 클라이언트가 메시지들을 방송(broadcast)할 수 있게 할 수 있다. 클라이언트는 또한 메시징 시스템의 사용자들 사이의 실시간 상호작용을 제공하기에 충분히 짧은 시간 프레임 내에 메시징 시스템에 의해 방송되는 메시지들을 디스플레이할 수 있다. 메시지의 수신자들은 메시지를 방송하는 클라이언트의 계정과 미리 정의된 관계를 가질 수 있다. 미리 정의된 관계는 연결 그래프 리포지토리(132)에 나타낼 수 있다.
구독 시스템(120)은 클라이언트로부터 구독 요청을 수신하도록 구성된다. 구독 요청은 토픽을 식별한다. 구독 요청에 응답하여, 구독 시스템은 클라이언트가 토픽을 구독하게 한다. 구독 시스템은 클라이언트가 토픽에 관련된 정보에 대한 요청들을 계속해서 전송할 것을 요구하지 않고 정보를 구독된 클라이언트에 전송한다.
클라이언트는 먼저 이벤트 요청을 구독 시스템에 전송함으로써 구독을 개시할 수 있다. 이벤트 요청은 클라이언트의 디바이스와 구독 시스템 사이의 네트워크 연결을 설정하는 HTTP GET 요청일 수 있다. 이벤트 요청에 응답하여, 구독 시스템의 채널 서버가 구성 패킷을 클라이언트에 전송할 수 있다. 구성 패킷은 사용자에 대한 고유 식별자인 세션 식별자(ID)를 포함할 수 있다. 네트워크 연결을 설정하고 구성 패킷을 수신한 후, 클라이언트는 구독 시스템에 구독 요청을 전송할 수 있다. 구독 요청은 클라이언트의 세션 ID 및 클라이언트가 구독하기를 원하는 것에 대응하는 토픽을 포함하는 HTTP POST 요청일 수 있다. 그 다음, 구독 시스템은 구독 요청에 의해 지정된 토픽에 대해 클라이언트에 대한 구독 세션을 개시한다. 일단 클라이언트가 토픽에 대해 구독되면, 구독 시스템은 토픽에 관련된 이벤트들을 클라이언트에 전송할 수 있다. 예를 들어, 구독은 이벤트 요청에 의해 설정된 네트워크 연결을 사용하여 토픽에 관련된 이벤트들을, 구독하는 클라이언트 디바이스들에 전송할 수 있다.
도 2는 클라이언트(202)와 통신가능하게 결합된 예시적인 구독 시스템(200)의 블록도이다. 클라이언트(202)는 대표적인 클라이언트이다. 많은 상이한 클라이언트 디바이스들이 구독 시스템(200)과 통신가능하게 결합될 수 있다.
구독 시스템(200)은 프론트 엔드(front end)(210), 채널 서버들(212, 222, 및 224), 구독 리포지토리(226), 이벤트 큐들(232, 233, 및 234), 팬-아웃 큐(228), 이벤트 프로세서(240), 큐잉 엔진(queueing engine)(245), 및 발행 서비스들(publish services)(252 및 254)을 포함한다. 구독 시스템의 컴포넌트들 사이의 연결들은 네트워크 연결들, 예를 들어, LAN(local area network), 인터넷 등일 수 있다.
프론트 엔드(210)는 클라이언트(202)로부터의 통신들, 예를 들어, 구독 요청들을 수신하고 이벤트들을 클라이언트(202)에 전송하도록 구성되는 구독 시스템(200)의 엔드포인트를 나타낸다. 일부 구현들에서, 프론트 엔드(210)는 에지 서버(edge server)와 하나 이상의 라우팅 엔진(routing engine) 둘 다를 포함한다. 에지 서버는 외부 네트워크로부터 구독 시스템에 게이트웨이를 제공한다. 에지 서버는 클라이언트로부터 HTTP 트래픽을 수신하고 이벤트들을 클라이언트에 전송하도록 구성된다. HTTP 트래픽은 구독 요청을 포함할 수 있다. 구독 요청은 구독 요청을 특정 채널 서버로 라우팅하는 하나 이상의 라우팅 엔진 중 하나에 전송될 수 있다. 특정 채널 서버는 임의의 적합한 기법을 사용하여 선택될 수 있고, 예를 들어, 라운드-로빈(round-robin) 기법을 사용하여 수신된 구독 요청들을 개별 채널 서버들로 배포할 수 있다. 이벤트 요청을 수신하는 채널 서버는 이벤트 요청을 전송한 클라이언트에 대한 구독 세션을 호스팅한다.
구독 시스템(200)은 3개의 채널 서버를 포함하는 것으로 도시되어 있지만, 다른 구현들에서, 구독 모듈은 메시징 플랫폼에 대해 더 많은 채널 서버, 예를 들어, 수백 개의 채널 서버를 포함할 수 있다. 각각의 채널 서버(212, 222, 및 224)는 고유 채널 서버 식별자(ID)와 연관된다. 각각의 채널 서버 ID는 채널 서버의 특정 이벤트 큐를 식별하는 데 사용될 수 있다.
구독 경로
구독 요청을 수신하는 것에 응답하여, 특정 채널 서버는 프론트 엔드(210)를 통해 구성 패킷을 클라이언트에 전송할 수 있다. 구성 패킷은 클라이언트 구독에 대한 고유 식별자인 세션 식별자(ID)를 포함한다. 구독된 토픽에 대한 구독 타이머가 구성 패킷에 또한 포함된다. 구독 타이머는, 클라이언트가 TTL 동안 비활성이었다고 채널 서버가 결정하는 경우에 채널 서버가 구독된 클라이언트를 토픽으로부터 구독취소(unsubscribe)하는 시간 기간(time period)에 대응하는 구독의 존속 시간(time to live), 즉 TTL을 나타낼 수 있다.
구독 프로세스의 일부로서, 클라이언트는 클라이언트가 구독할 특정 토픽을 갖는 구성 패킷에 응답할 수 있다. 일부 구현들에서, 응답은 클라이언트의 세션 ID 및 토픽을 포함하는 HTTP POST 요청이다. 예를 들어, 토픽은 메시징 플랫폼의 특정 메시지 또는 대화일 수 있다. 토픽은 메시징 플랫폼에 의해 사용되는 특정 식별자, 예를 들어, 메시지 또는 대화 식별자에 의해 식별될 수 있다. 토픽은 토픽과 연관된 이벤트들이 메시지와의 임의의 상호작용, 예를 들어, 참여 활동(engagement activity)을 포함하는 메시지일 수 있다. 다른 예로서, 토픽은 대화에 대해 더 구체적인 것, 예를 들어, 식별된 대화에 대한 타이핑일 수 있고, 여기서 토픽에 대한 이벤트들은 사용자가 타이핑하고 있다는 통지를 포함한다.
구독 요청을 수신하는 채널 서버는, 세션 ID들을 구독 토픽들에 관련시키는 로컬 맵핑에 세션 ID를 추가하는 것을 포함하여 구독을 설정한다. 따라서, 각각의 채널 서버는 채널 서버에 의해 호스팅되는 각각의 토픽에 대한 클라이언트 세션을 식별하는 맵핑을 갖는다. 그 결과, 채널 서버에 의해 호스팅되는 토픽에 대한 특정 이벤트 정보를 수신하면, 채널 서버는 맵핑을 사용하여 각각의 구독된 클라이언트를 식별해서 세션 식별자들에 대한 토픽들의 맵핑에 기초하여 이벤트를 제공할 수 있다.
구독 세션을 설정하는 것은 또한 구독 리포지토리(226)에 저장된 맵 내의 토픽과 채널 서버를 연관시키는 것을 포함한다. 구체적으로, 구독 리포지토리(226)는 채널 서버들에 대한 토픽들의 맵핑을 포함하여, 각각의 토픽에 대해, 그 토픽에 대한 클라이언트 구독들을 호스팅하는 하나 이상의 채널 서버가 식별될 수 있다.
일부 경우에, 채널 서버는 채널 서버가 이미 핸들링하고 있는 토픽에 대한 구독 요청을 수신한다. 예를 들어, 채널 서버는 하나 이상의 다른 클라이언트 세션 ID에 대해 토픽에 대한 구독 세션을 이미 호스팅하고 있을 수 있다. 이러한 경우에, 채널 서버 ID는 구독 리포지토리(226)에서 채널 서버 ID들에 대한 토픽들의 맵핑에 이미 저장되어 있다. 결과적으로, 채널 서버는 맵에서의 중복 엔트리들을 피하기 위해 그것의 채널 서버 ID를 맵핑에 추가하지 않는다.
토픽에 대한 각각의 클라이언트 구독은 TTL이라고 하는 미리 정해진 시간량 동안 지속된다. TTL은 또한 채널 서버가 세션 ID들에 대한 토픽들의 로컬 맵핑에서 클라이언트의 세션 ID를 유지하는 시간 기간으로 생각될 수 있다. 채널 서버가 토픽에 대한 구독을 개시할 때, 구독과 연관된 구독 타이머를 TTL에 의해 지정된 시간량으로 설정한다. 구독 타이머가 만료되면, 클라이언트를 호스팅하는 채널 서버는 세션 ID들에 대한 토픽들의 로컬 맵핑으로부터 클라이언트의 세션 ID를 제거함으로써 토픽으로부터 클라이언트를 구독취소할 것이다. 구독 타이머를 유지하는 한 가지 이점은, 구독 시스템이 유휴 또는 무응답 상태인 클라이언트들의 구독들을 종료할 수 있게 한다는 것이다. TTL에 적합한 값은 2분, 5분이다. 또한, 채널 서버의 다른 세션 ID들이 토픽에 대해 구독되지 않은 경우, 채널 서버 ID는 구독 리포지토리 맵핑으로부터 제거될 수 있다.
이 구현에서, 구독된 클라이언트는 중단되지 않는 구독을 유지하기 위해 TTL의 만료 전에 토픽에 대한 새로운 구독 요청을 구독 시스템에 전송해야 한다. 새로운 구독 요청을 수신하는 것에 응답하여, 채널 서버는 클라이언트의 구독과 연관된 구독 타이머를 TTL로 리셋할 수 있으며, 즉, TTL에 대응하는 시간량을 구독 타이머에 재할당할 수 있다.
구독 시스템은 또한 클라이언트가 한 번에 가질 수 있는 구독의 수를 제한할 수 있다. 일부 구현들에서, 구독 시스템은 각각의 클라이언트를 최대 구독 수, 예를 들어, 10 또는 25개의 구독으로 제한한다.
이벤트 전달 경로
메시징 플랫폼, 예를 들어, 메시징 플랫폼(100)의 상이한 서비스들은 구독 시스템(200)에 이벤트들을 발행할 수 있다. 예를 들어, 발행 서비스들(252, 254)은 메시징 플랫폼의 다른 서비스들이 예를 들어, Thrift API를 사용하여 이벤트들을 발행할 수 있게 하는 애플리케이션 프로그래밍 인터페이스(application programming interface, API)를 제공할 수 있다. 발행 서비스들은 이벤트 프로세서(240)에 이벤트들을 제공하기 전에 이벤트들에 대한 처리, 예를 들어, 이벤트들의 검증 또는 레이트 제한을 또한 수행할 수 있다. 이 예에서, 구독 시스템(200)은 2개의 발행 서비스(252 및 254)를 포함하지만, 다른 구현들에서, 구독 모듈은 구독 시스템(200)의 특정 요건들에 따라 더 많거나 더 적은 발행 서비스를 포함할 수 있다.
발행 서비스들(252, 254)은 이벤트들을 이벤트 프로세서(240)로 전달한다. 이벤트 프로세서(240)는 각각의 이벤트를 이벤트의 토픽에 대한 구독들을 수용하는 대응하는 채널 서버들로 라우팅한다.
이벤트 프로세서(240)는 이벤트들을 이벤트 큐들(230, 232, 234)에 전송한다. 이 구현에서, 구독 시스템은 단일 이벤트 프로세서(240)를 포함하지만, 다른 구현들에서, 구독 모듈은 다수의 이벤트 프로세서를 포함할 수 있다.
각각의 이벤트는 토픽과 연관된다. 이벤트 콘텐츠는 하나 이상의 토픽에 대응하는 식별자를 포함할 수 있다. 예를 들어, 메시지에 대해 참여 카운터(engagement counter)가 증분되었다는 것을 나타내는 이벤트가 대응하는 메시지 식별자를 사용하여 그 메시지를 식별할 것이다. 구독된 토픽은 또한 메시지 식별자일 수 있다. 따라서, 이벤트 콘텐츠는 이벤트와 연관되는 토픽을 결정하는 데 사용될 수 있다.
이벤트 프로세서(240)는 구독 리포지토리(226)에서의 토픽들에 대한 채널 서버 ID들의 맵핑을 사용하여 주어진 토픽을 핸들링하고 있는 채널 서버를 결정한다. 맵핑을 사용하여, 이벤트 프로세서(240)는 이벤트를 수신하기 위한 하나 이상의 채널 서버를 결정한다. 그 후 이벤트 프로세서는 토픽을 핸들링하는 채널 서버들에 대응하는 하나 이상의 이벤트 큐에 이벤트를 전송할 수 있다. 특히, 각각의 채널 서버(212, 222, 224)는 대응하는 이벤트 큐(230, 232, 234)와 연관된다. 일부 구현들에서, 이벤트 프로세서(240)는 토픽에 대한 룩업 요청(look up request)을 구독 리포지토리(226)에 전송한다. 이어서 구독 리포지토리(226)는 토픽을 핸들링하고 있는 채널 서버 ID의 세트를 반환한다.
예를 들어, 주어진 이벤트가 토픽 1과 연관될 수 있다. 구독 리포지토리(226)에서의 맵핑을 사용하여, 이벤트 프로세서(240)는 토픽 1이 채널 서버들(212 및 224)에 의해 핸들링된다고 결정할 수 있다. 결과적으로, 이벤트는 각각 채널 서버들(212 및 224)에 대응하는 이벤트 큐들(230 및 234)에 전송된다.
채널 서버들(212, 222, 224)은 이벤트 프로세서(240)로부터 그들 각자의 이벤트 큐들을 통해 이벤트들을 수신한다. 일부 구현들에서, 각각의 채널 서버(212, 222, 224)는 대응하는 이벤트 큐(230, 232, 234)로부터 이벤트들을 주기적으로 판독한다. 예를 들어, 채널 서버들은 각각 50 ms마다 그들 각자의 이벤트 큐들로부터 판독할 수 있다. 일부 다른 구현들에서, 이벤트 프로세서(240)는 이벤트 큐들을 사용하여, 예를 들어, 주기적인 시간 간격에 기초하여, 이벤트들이 큐에 추가되는 때에 기초하여, 또는 큐 내의 계류중인 이벤트들의 볼륨에 기초하여, 이벤트들을 대응하는 채널 서버들에 푸시(push)한다.
채널 서버가 이벤트 큐로부터 이벤트를 수신한 후, 채널 서버는 수신된 이벤트의 토픽을 구독하는 클라이언트를 결정하고 그 클라이언트에게 이벤트를 전송하기 위해 채널 서버와 열린 연결(open connection)을 갖는 클라이언트들의 세션 ID들에 대한 토픽들의 로컬 맵핑을 조회할 수 있다.
따라서, 이벤트들은 이벤트 프로세서에 의해 이벤트의 토픽을 호스팅하는 채널 서버들로 팬 아웃된다. 이어서, 각각의 채널 서버는 토픽을 구독한 클라이언트들로 이벤트를 팬 아웃한다.
팬-아웃 큐
위에 설명된 바와 같이, 이벤트 프로세서(240)는 이벤트의 토픽에 대한 구독자들을 핸들링하는 각각의 채널 서버에 대한 각자의 이벤트 큐들에 이벤트를 전송한다. 그러나, 일부 상황들에서 이것은 많은 개별 이벤트 큐들에 이벤트를 기입하는 것을 의미할 수 있다. 개별 큐들에 대한 많은 중복 기입들로부터 발생하는 비효율성을 피하기 위해, 이벤트 프로세서는 먼저 이벤트의 토픽에 대한 구독들을 핸들링하고 있는 채널 서버들의 수를 결정한다. 채널 서버들의 수가 지정된 임계 수를 초과한다는 결정에 응답하여, 이벤트 프로세서(240)는 이벤트를 이벤트 팬-아웃 큐(228)에 대신 전송하고, 개별 채널 서버 큐들에 전송하지 않는다. 일부 구현들에서, 이벤트 팬-아웃 큐(228)는 이벤트들을 채널 서버들에 라우팅하기 위해 필요에 따라 동적으로 생성된다.
이벤트 팬-아웃 큐(228)는 다수의 채널 서버들에 이벤트들을 제공할 수 있다. 일부 구현들에서, 각각의 채널 서버는 팬-아웃 큐(228)로부터 주기적으로 판독한다. 일부 다른 구현들에서, 팬-아웃 큐(228)는 이벤트들을 채널 서버들에 주기적으로 푸시한다. 채널 서버들의 임계 수는 0보다 크고 주어진 구독 모듈에 포함된 채널 서버들의 총 수보다 작거나 같은 임의의 적합한 수일 수 있다. 예를 들어, 1000개의 채널 서버가 있는 경우, 구독 토픽을 핸들링하는 채널 서버들의 수가 채널 서버들의 총 수의 절반을 초과할 때 이벤트 팬-아웃 큐(228)가 사용될 수 있다. 특정 임계 수는 다양한 기준에 기초하여 결정될 수 있고, 일부 경우들에서 이벤트 프로세서의 자원 사용, 이벤트들의 볼륨, 채널 서버들의 수 등에 기초하여 경험적으로 결정될 수 있다.
실패 거동
일부 경우들에서, 클라이언트의 디바이스는 네트워크 연결성(network connectivity)을 상실할 수 있다. 클라이언트가 채널 서버에 대한 연결을 설정한 경우, 구독 시스템은 다수의 방식으로 클라이언트 네트워크 상실(client network loss)을 검출할 수 있다.
제1 예로서, 채널 서버가 이벤트를 프론트 엔드(210)에 전송하는 경우, 프론트 엔드(210)는 이벤트를 클라이언트(202)에 전송하려고 시도할 것이다. 클라이언트(202)가 네트워크 연결성을 상실한 경우, 프론트 엔드(210)는 이벤트를 전송할 네트워크 연결이 없다는 것을 검출할 수 있다. 이 검출에 후속하여, 프론트 엔드(210)는 클라이언트(202)를 호스팅하는 채널 서버에 대하여 네트워크 연결의 상실을 통신할 수 있다. 이어서, 채널 서버는 클라이언트를 구독취소할 수 있으며, 이는 토픽을 그 토픽을 구독하는 클라이언트의 세션 ID에 관련시키는 맵으로부터 클라이언트의 세션 ID를 제거하는 것을 포함할 수 있다.
제2 예로서, 클라이언트의 구독과 연관된 TTL은 클라이언트가 네트워크 연결을 상실했다는 것을 나타낼 수 있다. TTL이 만료된 후, 구독 시스템은 클라이언트를 자동으로 구독취소할 것이다.
도 3은 구독 모듈을 구독한 클라이언트에 이벤트를 전송하는 예시적인 프로세스(300)의 흐름도이다. 편의상, 프로세스는 하나 이상의 위치에 배치되고 본 명세서에 따라 적절히 프로그램된 하나 이상의 컴퓨터의 시스템에 의해 수행되는 것으로서 설명될 것이다. 예를 들어, 구독 시스템(200)은, 적절히 프로그램될 때, 예시적인 프로세스를 수행할 수 있다.
시스템은 하나 이상의 클라이언트 디바이스에 대해 토픽에 대한 구독을 개시한다(305). 더 구체적으로, 시스템은 시스템과의 통신을 설정하기 위한 이벤트 요청을 수신한다. 각각의 이벤트 요청에 응답하여, 시스템의 채널 서버는 세션 식별자를 포함하는 구성 패킷을 대응하는 클라이언트 디바이스에 전송한다. 이에 응답하여, 클라이언트는 사용자가 구독하기를 원하는 토픽을 식별하는 구독 요청을 전송한다. 구독 요청에 응답하여, 채널 서버는 클라이언트 구독에 대한 세션 ID를, 토픽들을 클라이언트 디바이스 구독자들의 세션 ID들에 맵핑하는 구독 리포지토리 내의 토픽과 연관시키는 것을 포함하여 클라이언트 디바이스에 대해 토픽에 대한 구독을 개시한다.
시스템은 이벤트 프로세서 상에서 각자의 토픽에 일반적으로 관련되는 이벤트들을 수신한다(310). 이벤트 프로세서는 시스템의 클라이언트들을 포함하는 하나 이상의 소스로부터 이벤트들을 수신하는 발행 서비스로부터 이벤트를 수신할 수 있다.
시스템은 특정 토픽을 핸들링하고 있는 채널 서버들의 수를 결정한다(315). 이벤트 프로세서는 그것이 수신하는 각각의 이벤트와 관련되는 토픽 또는 토픽들을 결정한다. 이벤트 프로세서는, 예를 들어, 토픽들을 그 토픽들을 핸들링하는 채널 서버들에 관련시키는 맵핑에 액세스함으로써, 그 토픽을 핸들링하고 있는 채널 서버들을 또한 결정할 수 있다.
시스템은 토픽에 대응하는 채널 서버들의 수가 채널 서버들의 임계 수보다 큰지를 결정한다(320).
채널 서버들의 수가 임계 수보다 크다고 결정하는 것에 응답하여, 시스템은 이벤트 프로세서로부터의 수신된 이벤트를 이벤트 팬-아웃 큐에 전송, 예를 들어, 기입한다(325, 즉, "예" 분기). 일부 구현들에서, 시스템은 결정에 응답하여 이벤트 팬-아웃 큐를 동적으로 생성한다. 이벤트 팬-아웃 큐는 이벤트 프로세서를 토픽을 핸들링하고 있는 채널 서버들에 통신가능하게 결합한다.
각자의 채널 서버들은 이벤트 팬-아웃 큐로부터 수신된 이벤트를 판독한다(330). 특히, 각각의 채널 서버는 채널 서버에 의해 핸들링되는 토픽들에 대한 이벤트 팬-아웃 큐 내의 이벤트들을 획득한다.
시스템은, 각각의 채널 서버에서, 수신된 이벤트의 토픽을 구독하는 클라이언트 디바이스를 결정하고, 이벤트를 그 클라이언트 디바이스에 전송한다(335). 이벤트의 토픽을 구독한 클라이언트 디바이스들은 토픽들을 토픽을 구독한 클라이언트 디바이스들의 세션 ID들에 관련시키는 맵핑을 사용하여 식별된다. 토픽을 구독한 클라이언트를 호스팅하는 각각의 채널 서버는 수신된 이벤트를 호스팅된 클라이언트에 전송한다.
채널 서버들의 수가 임계 수보다 크지 않다고 결정하는 것에 응답하여, 시스템은 이벤트 프로세서로부터의 수신된 이벤트를 하나 이상의 이벤트 큐에 전송, 예를 들어, 기입한다(440, 즉, "아니오" 분기). 이벤트 큐들 각각은 이벤트와 관련된 토픽에 대한 구독을 핸들링하는 채널 서버들 중 하나에 대응한다. 이벤트 프로세서는 토픽들을 그 토픽들을 핸들링하고 있는 채널 서버들의 채널 서버 ID들에 관련시키는 맵핑을 사용하여 이벤트를 전송하기 위한 적절한 이벤트 큐들을 결정할 수 있다. 또한, 각각의 이벤트 큐는 대응하는 채널 서버 ID와 연관된다.
각자의 채널 서버들은 대응하는 이벤트 큐들로부터 수신된 이벤트를 판독한다(345). 하나 이상의 이벤트 큐로부터 판독한 후에, 각각의 채널 서버는, 예를 들어, 대응하는 토픽을 식별하는 이벤트에 포함된 식별자를 사용하여, 이벤트에 대응하는 토픽을 결정할 수 있다.
스테이지 345에 이어서, "아니오" 분기는 전술한 스테이지 335를 수행함으로써 계속될 수 있다.
예로서, 사용자는 메시징 플랫폼 상에서 방송되는 특정 메시지와 같은 콘텐츠를 구독하기를 원할 수 있다. 구독은 메시지에 관련된 하나 이상의 참여, 예를 들어, 메시지 "좋아요"의 업데이트된 카운트에 관한 업데이트들을 수신하려는 사용자의 바람을 나타낼 수 있다. 구독의 토픽은 메시지를 식별하는 정보를 포함할 수 있다. 하나 이상의 참여는, 예를 들어, 특정 참여 타입에 대한 참여 카운트를 증분시킴으로써, 하나 이상의 다른 사용자가 메시지와 상호작용했다는 표시들일 수 있다. 예를 들어, 하나 이상의 참여는 하나 이상의 다른 사용자가 메시지를 좋아요 또는 재방송 했다는 것을 나타낼 수 있다. 하나 이상의 다른 사용자의 디바이스 또는 디바이스들은 하나 이상의 참여를 메시지 시스템에 통지할 수 있다. 메시징 시스템은 이 정보를 구독 시스템에 통신할 수 있고, 구독 시스템은, 그에 응답하여, 이벤트로서 참여를 구독된 사용자의 디바이스에 전송할 수 있다. 따라서, 사용자는 실시간으로 참여들의 증분 표시들을 볼 수 있다. 토픽을 구독한 사용자는, 사용자가 그 토픽을 구독취소하는 것을 선택할 때까지 구독 시스템으로부터 이벤트들을 계속해서 수신한다. 클라이언트는 구독취소 요청을 구독 모듈에 전송함으로써 토픽을 구독취소할 수 있다. 예를 들어, 구독취소 요청은 HTTP POST 요청일 수 있다. HTTP POST 요청은 클라이언트의 세션 ID 및 사용자가 구독취소하기를 원하는 토픽을 포함할 수 있다. 에지 서버는 구독취소 요청을 라우팅 엔진들 중 하나의 라우팅 엔진에 전송할 수 있고, 그러면 라우팅 엔진은 그것을 토픽에 대한 클라이언트의 구독을 호스팅하고 있는 채널 서버에 전송할 수 있다. 구독취소 요청에 응답하여, 토픽을 핸들링하는 채널 서버는 클라이언트를 구독취소할 수 있으며, 즉, 클라이언트의 구독 세션을 종료할 수 있다.
클라이언트를 구독취소하는 것은 클라이언트가 구독했던 토픽으로부터 클라이언트의 세션 ID를 분리하는 것을 포함한다. 즉, 채널 서버는 세션 ID들에 대한 토픽들의 로컬 맵핑으로부터 클라이언트의 세션 ID를 삭제한다. 채널 서버가 토픽에 대한 다른 클라이언트 세션을 호스팅하고 있지 않으면, 구독 리포지토리는 토픽들과 그 토픽들을 핸들링하는 채널 서버 ID들의 로컬 맵핑에서 토픽으로부터 채널 서버 ID를 분리한다.
토픽을 수동으로 구독취소하는 것에 더하여, 클라이언트는 또한 구독 시스템에 의해 토픽을 자동으로 구독취소할 수 있다. 사용자가 임계 시간량, 예를 들어, 클라이언트의 구독 세션의 TTL보다 많이 유휴인 것으로 결정되면, 구독 시스템은 클라이언트의 구독 세션을 자동으로 종료할 수 있다. 예를 들어, 클라이언트는 컴퓨팅 디바이스를 사용하여 방송을 구독할 수 있다. 구독 시스템은 컴퓨팅 디바이스가 슬립 모드에 진입하는지를 검출하고, 사용자가 유휴인 것으로 결정할 수 있다. 컴퓨팅 디바이스가 임계 시간량보다 많이 슬립 모드에 남아 있으면, 구독 모듈은 방송에 대한 컴퓨팅 디바이스의 구독을 종료할 수 있다.
일부 실시예들에서, 사용자가 임계 시간량 동안 유휴였다는 것을 검출하는 것에 응답하여, 구독 시스템은 구독 시스템이 특정 기간(timespan) 후에 클라이언트의 구독을 종료할 것임을 나타내기 위해 구독취소 통지를 클라이언트에 전송할 수 있다. 예를 들어, 사용자는 컴퓨팅 디바이스를 사용하여 토픽을 구독할 수 있다. 구독 시스템은 사용자가 임계 시간량 동안 컴퓨팅 디바이스와 상호작용하지 않았다고 결정할 수 있다. 그 후 구독 모듈은 구독취소 통지를 컴퓨팅 디바이스에 전송할 수 있다. 구독취소 통지는 토픽의 구독취소를 피하기 위해 사용자가 컴퓨팅 디바이스와 상호작용해야 하는 기간을 포함할 수 있다.
클라이언트는 사용자가 유휴가 아닌 한 사용자의 구독이 활성으로 유지되는 것을 보장한다. 즉, 사용자가 유휴가 아닌 한, 클라이언트는 구독 시스템에 재구독 요청들을 발행할 수 있다. 따라서, 구독 시스템은 비-유휴 사용자가 구독을 유지하기 위해 계속해서 재구독할 것을 요구하지 않는다.
사용자의 구독들은 또한 구독 시스템에 연결된 컴퓨팅 디바이스 상에서 사용자가 현재 보고 있는 것에 기초할 수 있다. 예를 들어, 사용자는 사용자의 디바이스에 의해 현재 디스플레이되고 있는 게시물(post)을 구독할 수 있다. 게시물이 디바이스 상에서 더 이상 보이지 않으면(예를 들어, 사용자가 게시물로부터 다른 곳을 탐색하면), 구독 모듈은 게시물로부터 사용자를 자동으로 구독취소할 수 있다.
본 명세서에서 설명되는 주제의 실시예들 및 액션들 및 동작들은 디지털 전자 회로로, 유형으로 구체화되는(tangibly-embodied) 컴퓨터 소프트웨어 또는 펌웨어로, 본 명세서에 개시된 구조들 및 이들의 구조적 등가물들을 포함하는 컴퓨터 하드웨어로, 또는 이들의 하나 이상의 것의 조합들로 구현될 수 있다. 본 명세서에 설명된 주제의 실시예들은 하나 이상의 컴퓨터 프로그램, 즉, 데이터 처리 장치에 의해 실행하기 위한 또는 데이터 처리 장치의 동작을 제어하기 위한 유형적(tangible) 비일시적 저장 매체 상에 인코딩된 컴퓨터 프로그램 명령어들의 하나 이상의 모듈로서 구현될 수 있다. 대안적으로 또는 추가적으로, 프로그램 명령어들은 인공적으로 생성된 전파 신호, 예를 들어, 데이터 처리 장치에 의한 실행을 위해 적합한 수신기 장치로 송신할 정보를 인코딩하도록 생성된 머신 생성 전기, 광 또는 전자기 신호 상에 인코딩될 수 있다. 컴퓨터 저장 매체는 머신 판독가능 저장 디바이스, 머신 판독가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 것의 조합일 수 있거나 그의 일부일 수 있다. 컴퓨터 저장 매체는 전파 신호가 아니다.
"데이터 처리 장치"라는 용어는 예로서 프로그램가능 프로세서, 컴퓨터, 또는 다중 프로세서 또는 컴퓨터를 포함하는, 데이터를 처리하기 위한 모든 종류의 장치, 디바이스 및 머신을 포함한다. 데이터 처리 장치는 특수 목적 로직 회로, 예를 들어, FPGA(field programmable gate array), ASIC(application specific integrated circuit), 또는 GPU(graphics processing unit)를 포함할 수 있다. 장치는, 하드웨어 이외에도, 컴퓨터 프로그램용 실행 환경을 생성하는 코드, 예를 들어, 프로세서 펌웨어를 구성하는 코드, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 이들 중 하나 이상의 것의 조합을 또한 포함할 수 있다.
프로그램, 소프트웨어, 소프트웨어 애플리케이션, 앱, 모듈, 소프트웨어 모듈, 엔진, 스크립트, 또는 코드라고도 지칭되거나 설명될 수 있는 컴퓨터 프로그램은 컴파일된 또는 해석된 언어들, 또는 선언적 또는 절차적 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 작성될 수 있고; 그것은 독립형 프로그램으로서 또는 모듈, 컴포넌트, 엔진, 서브루틴, 또는 컴퓨팅 환경에서 실행하기에 적합한 다른 유닛으로서를 포함하여, 임의의 형태로 배치될 수 있으며, 이 환경은 하나 이상의 위치에서 데이터 통신 네트워크에 의해 상호연결된 하나 이상의 컴퓨터를 포함할 수 있다.
컴퓨터 프로그램은 파일 시스템 내의 파일에 대응할 수 있지만, 그럴 필요는 없다. 컴퓨터 프로그램은 다른 프로그램들 또는 데이터, 예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트를 보유하는 파일의 일부분에, 문제의 프로그램에 전용된 단일 파일에, 또는 다수의 조율된 파일들(coordinated files), 예를 들어, 하나 이상의 모듈, 서브프로그램(subprogram), 또는 코드 부분(portion of code)을 저장하는 파일들에 저장될 수 있다.
본 명세서에 설명된 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작하고 출력을 생성함으로써 동작들을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 컴퓨터에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한 특수 목적 로직 회로, 예를 들어, FPGA, ASIC, 또는 GPU에 의해, 또는 특수 목적 로직 회로와 하나 이상의 프로그램된 컴퓨터의 조합에 의해 수행될 수 있다.
컴퓨터 프로그램의 실행에 적합한 컴퓨터들은 범용 또는 특수 목적 마이크로프로세서들 또는 둘 다, 또는 임의의 다른 종류의 중앙 처리 유닛에 기초할 수 있다. 일반적으로, 중앙 처리 유닛은 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 다로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 필수 요소들은 명령어들을 실행하는 중앙 처리 유닛과 명령어들 및 데이터를 저장하는 하나 이상의 메모리 디바이스이다. 중앙 처리 유닛과 메모리는 특수 목적 로직 회로에 의해 보완되거나 그에 통합될 수 있다.
일반적으로, 컴퓨터는 또한 하나 이상의 대용량 저장 디바이스를 포함하거나, 이들로부터 데이터를 수신하거나 이들에 데이터를 전송하도록 동작가능하게 결합될 것이다. 대용량 저장 디바이스들은, 예를 들어, 자기, 광 자기, 또는 광 디스크들, 또는 고체 상태 드라이브들일 수 있다. 그러나, 컴퓨터가 이러한 디바이스들을 가질 필요는 없다. 더욱이, 컴퓨터는, 몇 가지 예를 들면, 다른 디바이스, 예를 들어, 모바일 전화, PDA(personal digital assistant), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS(Global Positioning System) 수신기, 또는 휴대용 저장 디바이스, 예를 들어, USB(universal serial bus) 플래시 드라이브에 내장될 수 있다.
사용자와의 상호작용을 제공하기 위해, 본 명세서에 설명된 주제의 실시예들은 사용자에게 정보를 디스플레이하기 위한 디스플레이 디바이스, 예를 들어, LCD(liquid crystal display) 모니터, 및 사용자가 컴퓨터에 입력을 제공할 수 있는 입력 디바이스, 예를 들어, 키보드 및 포인팅 디바이스, 예를 들어, 마우스, 트랙볼 또는 터치패드를 갖는 컴퓨터 상에 구현되거나 그러한 컴퓨터와 통신하도록 구성될 수 있다. 다른 종류의 디바이스들이 또한 사용자와의 상호작용을 제공하기 위해 사용될 수 있으며; 예를 들어, 사용자에게 제공되는 피드백은 임의의 형태의 감각 피드백, 예를 들어, 시각 피드백, 청각 피드백, 또는 촉각 피드백일 수 있고; 사용자로부터의 입력은 음향, 음성, 또는 촉각 입력을 포함하는 임의의 형태로 수신될 수 있다. 또한, 컴퓨터는 사용자에 의해 사용되는 디바이스에 문서들을 전송하고 그로부터 문서들을 수신함으로써; 예를 들어, 사용자의 디바이스 상의 웹 브라우저로부터 수신된 요청들에 응답하여 웹 브라우저에 웹 페이지들을 전송함으로써, 또는 사용자 디바이스, 예를 들어, 스마트폰 또는 전자 태블릿 상에서 실행되는 앱과 상호작용함으로써 사용자와 상호작용할 수 있다. 또한, 컴퓨터는 텍스트 메시지들 또는 다른 형태들의 메시지를 개인 디바이스, 예를 들어, 메시징 애플리케이션을 실행중인 스마트폰에 전송하고 그에 응답하여 사용자로부터 응답 메시지들을 수신함으로써 사용자와 상호작용할 수 있다.
본 명세서에 설명된 주제의 실시예들은, 예를 들어, 데이터 서버로서, 백엔드 컴포넌트(backend component)를 포함하거나, 또는 미들웨어 컴포넌트, 예를 들어, 애플리케이션 서버를 포함하거나, 또는 프론트엔드 컴포넌트, 예를 들어, 사용자가 본 명세서에 설명된 주제의 구현과 상호작용할 수 있는 그래픽 사용자 인터페이스, 웹 브라우저, 또는 앱을 갖는 클라이언트 컴퓨터를 포함하거나, 또는 하나 이상의 이러한 백엔드, 미들웨어, 또는 프론트엔드 컴포넌트의 임의의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트들은 임의의 형태 또는 매체의 디지털 데이터 통신, 예를 들어, 통신 네트워크에 의해 상호연결될 수 있다. 통신 네트워크들의 예들은 LAN(local area network) 및 WAN(wide area network), 예를 들어, 인터넷을 포함한다.
컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로로부터 떨어져 있고 전형적으로는 통신 네트워크를 통해 상호작용한다. 클라이언트와 서버의 관계는 각자의 컴퓨터들 상에서 실행되며 서로 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들에 의하여 발생한다. 일부 실시예들에서, 서버는, 예를 들어, 클라이언트로서 기능하는, 디바이스와 상호작용하는 사용자에게 데이터를 디스플레이하고 그 사용자로부터 사용자 입력을 수신하는 목적들을 위해, 데이터, 예를 들어, HTML 페이지를 사용자 디바이스에 송신한다. 사용자 디바이스에서 생성된 데이터, 예를 들어, 사용자 상호작용의 결과는 서버에서 디바이스로부터 수신될 수 있다.
본 명세서가 많은 특정 구현 세부사항들을 포함하지만, 이들은 개시되는 것의 범위 또는 청구되고 있거나 청구될 수 있는 것의 범위에 대한 제한들로서 해석되어서는 안되며, 오히려 특정 실시예들에 특정될 수 있는 특징들의 설명들로서 해석되어야 한다. 별개의 실시예들의 맥락에서 본 명세서에서 설명되는 특정의 특징들은 조합하여 단일 실시예로 또한 구현될 수 있다. 반대로, 단일 실시예의 맥락에서 설명되는 다양한 특징들은 또한 복수의 실시예에서 별개로 또는 임의의 적합한 하위조합으로 구현될 수 있다. 더욱이, 특징들이 특정한 조합들로 작용하는 것으로서 위에서 설명되고 심지어 처음에 그와 같이 청구될 수 있지만, 청구된 조합으로부터의 하나 이상의 특징이 일부 경우들에서는 그 조합으로부터 제거될 수 있고, 청구항은 하위조합 또는 하위조합의 변형에 관한 것일 수 있다.
유사하게, 동작들은 특정 순서로 도면에 도시되고 청구항들에 나열되어 있지만, 이는 바람직한 결과들을 달성하기 위해, 이러한 동작들이 도시된 특정 순서로 또는 순차적인 순서로 수행되어야 하는 것, 또는 모든 예시된 동작들이 수행되어야 하는 것을 요구하는 것으로서 이해되어서는 안된다. 특정 상황들에서는, 멀티태스킹 및 병렬 처리가 유리할 수 있다. 또한, 전술한 실시예들의 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시예들에서 그러한 분리를 요구하는 것으로 이해되어서는 안 되고, 설명된 프로그램 컴포넌트들 및 시스템들이 일반적으로 단일 소프트웨어 제품으로 함께 통합될 수 있거나 다수의 소프트웨어 제품들로 패키지화될 수 있다는 것을 이해해야 한다.
주제의 특정한 실시예들이 설명되었다. 다른 실시예들이 다음의 청구항들의 범위 내에 있다. 예를 들어, 청구항들에서 인용된 액션들은 상이한 순서로 수행될 수 있고, 여전히 바람직한 결과들을 달성할 수 있다. 일 예로서, 첨부 도면들에 도시된 프로세스들은 바람직한 결과들을 달성하기 위해 반드시 도시된 특정 순서 또는 순차적인 순서를 요구하는 것은 아니다. 일부 경우들에서는, 멀티태스킹 및 병렬 처리가 유리할 수 있다.

Claims (20)

  1. 방법으로서,
    하나 이상의 클라이언트 디바이스 각각에 대해, 토픽(topic)에 대한 구독(subscription)을 개시하는 단계;
    이벤트 프로세서 상에서, 상기 토픽에 관련된 이벤트를 수신하는 단계;
    상기 토픽을 핸들링(handling)하고 있는 채널 서버들의 수를 결정하는 단계 - 각각의 채널 서버는 하나 이상의 클라이언트 디바이스에 의해 구독된 토픽들을 핸들링함 - ;
    상기 토픽을 핸들링하고 있는 채널 서버들의 수가 채널 서버들의 임계 수보다 크다고 결정하는 단계;
    상기 토픽에 대응하는 채널 서버들의 수가 상기 채널 서버들의 임계 수보다 크다는 결정에 응답하여, 상기 이벤트 프로세서로부터의 수신된 이벤트를 이벤트 팬-아웃 큐(event fan-out queue)에 기입하는 단계;
    상기 채널 서버들에 의해, 상기 이벤트 팬-아웃 큐로부터 상기 수신된 이벤트를 판독하는 단계; 및
    상기 토픽을 핸들링하고 있는 각자의 채널 서버 각각으로부터의 상기 수신된 이벤트를 상기 토픽을 구독한 상기 하나 이상의 클라이언트 디바이스에 전송하는 단계
    를 포함하는, 방법.
  2. 제1항에 있어서, 상기 하나 이상의 클라이언트 디바이스 각각에 대해, 토픽에 대한 구독을 개시하는 단계는:
    상기 하나 이상의 클라이언트 디바이스 각각으로부터, 상기 하나 이상의 클라이언트 디바이스로부터의 하나 이상의 구독 요청을 수신하는 단계 - 상기 하나 이상의 구독 요청은 상기 토픽을 포함함 - ; 및
    하나 이상의 수신된 구독 요청에 응답하여 상기 하나 이상의 클라이언트 디바이스에 대해 상기 토픽에 대한 하나 이상의 구독을 개시하는 단계 - 이는 각각의 개시된 구독에 대해, 상기 클라이언트 디바이스와 연관된 세션 식별자들을 토픽들에 대한 세션 식별자들의 맵핑에 추가하는 것을 포함함 -
    를 포함하는, 방법.
  3. 제2항에 있어서, 구독을 개시하는 단계는 구성 패킷을 상기 클라이언트 디바이스에 전송하는 단계를 포함하고, 상기 구성 패킷은 상기 클라이언트 디바이스에 고유한 하나 이상의 구독 타이머(subscription timer)를 포함하는, 방법.
  4. 제3항에 있어서, 상기 하나 이상의 구독 타이머는 상기 클라이언트 디바이스와 연관된 사용자가 유휴(idle)인 것을 나타내고, 유휴인 것은 상기 사용자가 임계 시간량보다 많이 자신의 클라이언트 디바이스와 상호작용하지 않는 것을 포함할 수 있는, 방법.
  5. 제1항에 있어서, 상기 결정된 수의 채널 서버들로부터의 상기 수신된 이벤트를 각자의 채널 서버 각각과 연관된 상기 하나 이상의 클라이언트 디바이스에 전송하는 단계는:
    상기 하나 이상의 클라이언트 디바이스가 유휴가 아니라고 결정하는 단계; 및
    상기 결정된 수의 채널 서버들로부터의 상기 수신된 이벤트를 각자의 채널 서버 각각과 연관된 상기 하나 이상의 클라이언트 디바이스에 전송하는 단계
    를 추가로 포함하는, 방법.
  6. 제4항에 있어서,
    상기 하나 이상의 클라이언트 디바이스가 유휴라고 결정하는 단계; 및
    상기 하나 이상의 유휴 클라이언트 디바이스로부터 하나 이상의 채널 서버를 분리시키는 단계
    를 추가로 포함하는, 방법.
  7. 제6항에 있어서,
    상기 하나 이상의 클라이언트 디바이스가 더 이상 유휴가 아니라고 결정하는 단계; 및
    상기 하나 이상의 클라이언트 디바이스와 상기 하나 이상의 채널 서버를 재연관시키는 단계
    를 추가로 포함하는, 방법.
  8. 제2항에 있어서, 상기 하나 이상의 구독 요청은 방송과 관련된 하나 이상의 참여(engagement)를 수신하기 위한 요청들이고, 상기 하나 이상의 참여는 좋아요(likes) 및 재방송(rebroadcasts)을 포함하며, 상기 토픽은 상기 방송과 관련된 정보를 포함할 수 있는, 방법.
  9. 제2항에 있어서, 상기 하나 이상의 구독 요청은 하나 이상의 참여자와의 대화와 관련된 하나 이상의 참여를 수신하기 위한 요청들이고, 상기 참여들은 상기 참여자들 중 하나 이상이 메시지를 구성하고 있다는 표시를 포함하며, 상기 토픽은 상기 대화와 관련된 정보를 포함할 수 있는, 방법.
  10. 시스템으로서,
    하나 이상의 클라이언트 디바이스로부터 하나 이상의 구독 요청을 수신하도록 구성되는 에지 서버(edge server);
    상기 에지 서버로부터 상기 하나 이상의 구독 요청을 수신하도록 구성되는 라우팅 엔진(routing engine);
    각각이 상기 라우팅 엔진으로부터 상기 하나 이상의 구독 요청 중 하나의 구독 요청을 수신하고 상기 하나 이상의 구독 요청 중 상기 하나의 구독 요청에 대응하는 구독 세션을 개시하도록 구성되는 복수의 채널 서버들;
    이벤트를 상기 복수의 채널 서버들 각각에 통신하도록 구성되는 이벤트 팬-아웃 큐(event fan-out queue); 및
    상기 이벤트를 상기 이벤트 팬-아웃 큐로 라우팅하도록 구성되는 이벤트 프로세서
    를 포함하고,
    상기 이벤트 프로세서는 상기 이벤트를 저장하도록 구성되는 큐잉 엔진(queueing engine)을 추가로 포함하는, 시스템.
  11. 제10항에 있어서, 제2 클라이언트로부터 표시를 수신하고 상기 표시에 대응하는 제2 이벤트를 상기 큐잉 엔진에 중계하도록 구성되는 발행 서비스(publish service)를 추가로 포함하는, 시스템.
  12. 하나 이상의 비일시적 컴퓨터 저장 매체 상에 인코딩된 컴퓨터 프로그램 제품으로서, 하나 이상의 컴퓨터에 의해 실행될 때, 상기 하나 이상의 컴퓨터로 하여금:
    하나 이상의 클라이언트 디바이스에 대해, 토픽에 대한 구독을 개시하는 것;
    이벤트 프로세서 상에서, 토픽에 관련된 이벤트를 수신하는 것;
    상기 토픽에 대응하는 채널 서버들의 수를 결정하는 것 - 각각의 채널 서버는 하나 이상의 클라이언트 디바이스와 연관됨 - ;
    상기 토픽에 대응하는 채널 서버들의 수가 채널 서버들의 임계 수보다 크다고 결정하는 것;
    상기 토픽에 대응하는 채널 서버들의 수가 상기 채널 서버들의 임계 수보다 크다는 결정에 응답하여, 상기 이벤트 프로세서로부터의 수신된 이벤트를 이벤트 팬-아웃 큐에 기입하는 것;
    상기 이벤트 팬-아웃 큐로부터 상기 수신된 이벤트를 판독하는 것; 및
    상기 결정된 수의 채널 서버들로부터의 상기 수신된 이벤트를 각자의 채널 서버 각각과 연관된 상기 하나 이상의 클라이언트 디바이스에 전송하는 것
    을 포함하는 동작들을 수행하게 하는 명령어들을 포함하는, 컴퓨터 프로그램 제품.
  13. 제12항에 있어서, 하나 이상의 클라이언트 디바이스에 대해, 토픽에 대한 구독을 개시하는 것은:
    하나 이상의 클라이언트 디바이스로부터 하나 이상의 이벤트 요청을 수신하는 것;
    하나 이상의 수신된 이벤트 요청에 응답하여 하나 이상의 구성 패킷을 상기 하나 이상의 클라이언트 디바이스에 전송하는 것;
    상기 하나 이상의 클라이언트 디바이스로부터 하나 이상의 구독 요청을 수신하는 것 - 상기 하나 이상의 구독 요청은 상기 토픽을 포함함 - ; 및
    하나 이상의 수신된 구독 요청에 응답하여 상기 하나 이상의 클라이언트 디바이스에 대해 상기 토픽에 대한 하나 이상의 구독을 개시하는 것
    을 포함하는, 컴퓨터 프로그램 제품.
  14. 제13항에 있어서, 상기 하나 이상의 클라이언트 디바이스에 전송되는 상기 하나 이상의 구성 패킷은 상기 하나 이상의 클라이언트 디바이스에 고유한 하나 이상의 구독 타이머를 포함하는, 컴퓨터 프로그램 제품.
  15. 제14항에 있어서, 상기 하나 이상의 구독 타이머는 상기 하나 이상의 클라이언트 디바이스와 연관된 각자의 하나 이상의 클라이언트가 유휴인 것을 나타내고, 유휴인 것은 상기 하나 이상의 클라이언트가 임계 시간량보다 많이 자신의 각자의 클라이언트 디바이스와 상호작용하지 않는 것을 포함할 수 있는, 컴퓨터 프로그램 제품.
  16. 제15항에 있어서, 상기 결정된 수의 채널 서버들로부터의 상기 수신된 이벤트를 각자의 채널 서버 각각과 연관된 상기 하나 이상의 클라이언트 디바이스에 전송하는 것은:
    상기 하나 이상의 클라이언트 디바이스가 유휴가 아니라고 결정하는 것; 및
    상기 결정된 수의 채널 서버들로부터의 상기 수신된 이벤트를 각자의 채널 서버 각각과 연관된 상기 하나 이상의 클라이언트 디바이스에 전송하는 것
    을 추가로 포함하는, 컴퓨터 프로그램 제품.
  17. 제15항에 있어서,
    상기 하나 이상의 클라이언트 디바이스가 유휴라고 결정하는 것; 및
    상기 하나 이상의 유휴 클라이언트 디바이스로부터 하나 이상의 채널 서버를 분리시키는 것
    을 추가로 포함하는, 컴퓨터 프로그램 제품.
  18. 제17항에 있어서,
    상기 하나 이상의 클라이언트 디바이스가 더 이상 유휴가 아니라고 결정하는 것; 및
    상기 하나 이상의 클라이언트 디바이스와 상기 하나 이상의 채널 서버를 재연관시키는 것
    을 추가로 포함하는, 컴퓨터 프로그램 제품.
  19. 제13항에 있어서, 상기 하나 이상의 구독 요청은 방송과 관련된 하나 이상의 참여를 수신하기 위한 요청들이고, 상기 하나 이상의 참여는 좋아요 및 재방송을 포함하며, 상기 토픽은 상기 방송과 관련된 정보를 포함할 수 있는, 컴퓨터 프로그램 제품.
  20. 제13항에 있어서, 상기 하나 이상의 구독 요청은 하나 이상의 참여자와의 대화와 관련된 하나 이상의 참여를 수신하기 위한 요청들이고, 상기 참여들은 상기 참여자들 중 하나 이상이 메시지를 구성하고 있다는 표시를 포함하며, 상기 토픽은 상기 대화와 관련된 정보를 포함할 수 있는, 컴퓨터 프로그램 제품.
KR1020217009085A 2018-08-31 2019-08-29 이벤트 콘텐츠 전달 KR102445806B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/120,138 2018-08-31
US16/120,138 US10805236B2 (en) 2018-08-31 2018-08-31 Event content delivery
PCT/US2019/048932 WO2020047335A1 (en) 2018-08-31 2019-08-29 Event content delivery

Publications (2)

Publication Number Publication Date
KR20210090612A true KR20210090612A (ko) 2021-07-20
KR102445806B1 KR102445806B1 (ko) 2022-09-20

Family

ID=67982146

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217009085A KR102445806B1 (ko) 2018-08-31 2019-08-29 이벤트 콘텐츠 전달

Country Status (7)

Country Link
US (2) US10805236B2 (ko)
EP (1) EP3831039A1 (ko)
JP (1) JP2021535515A (ko)
KR (1) KR102445806B1 (ko)
BR (1) BR112021003475A2 (ko)
DE (1) DE202019005789U1 (ko)
WO (1) WO2020047335A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021260969A1 (ja) * 2020-06-26 2021-12-30 ソニーグループ株式会社 ネットワークの制御方法、および、データ処理システム
CN113190778A (zh) * 2021-04-30 2021-07-30 深圳壹账通创配科技有限公司 业务数据推送方法、系统、计算机设备及计算机存储介质
JP7109638B1 (ja) * 2021-09-15 2022-07-29 Kddi株式会社 通知装置、通知方法及びプログラム
CN114328132A (zh) * 2022-03-15 2022-04-12 北京百度网讯科技有限公司 外部数据源的状态监控方法、装置、设备和介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130066979A1 (en) * 2011-09-12 2013-03-14 Microsoft Corporation Distributing events to large numbers of devices

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5557798A (en) * 1989-07-27 1996-09-17 Tibco, Inc. Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
DE69625652T2 (de) 1995-08-18 2003-09-18 Ibm Ereignisverwaltungsdienst
US20120296974A1 (en) * 1999-04-27 2012-11-22 Joseph Akwo Tabe Social network for media topics of information relating to the science of positivism
AUPR464601A0 (en) 2001-04-30 2001-05-24 Commonwealth Of Australia, The Shapes vector
US20030200548A1 (en) * 2001-12-27 2003-10-23 Paul Baran Method and apparatus for viewer control of digital TV program start time
US8028052B2 (en) 2004-07-09 2011-09-27 Alcatel Lucent NMS with multi-server change requests processing
US20150347600A1 (en) * 2005-10-21 2015-12-03 Joseph Akwo Tabe Broadband Centralized Transportation Communication Vehicle For Extracting Transportation Topics of Information and Monitoring Terrorist Data
US8341265B2 (en) * 2009-01-09 2012-12-25 Sonus Networks, Inc. Hybrid server overload control scheme for maximizing server throughput
CN102859541A (zh) * 2010-04-19 2013-01-02 国际商业机器公司 在发布/订阅通讯中控制消息传递
US20140297350A1 (en) 2013-03-27 2014-10-02 Hewlett-Packard Evelopment Company, L.P. Associating event templates with event objects
US10009394B2 (en) 2014-08-04 2018-06-26 Cbs Interactive Inc. Techniques to broadcast live event data in real-time
US9948739B2 (en) * 2014-08-04 2018-04-17 Cbs Interactive Inc. Techniques to aggregate and broadcast live event data in real-time
US10942792B2 (en) 2015-10-15 2021-03-09 Push Technology Limited Event driven subscription matching

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130066979A1 (en) * 2011-09-12 2013-03-14 Microsoft Corporation Distributing events to large numbers of devices

Also Published As

Publication number Publication date
US20200076743A1 (en) 2020-03-05
EP3831039A1 (en) 2021-06-09
WO2020047335A1 (en) 2020-03-05
BR112021003475A2 (pt) 2021-05-18
US10805236B2 (en) 2020-10-13
US11283725B2 (en) 2022-03-22
KR102445806B1 (ko) 2022-09-20
DE202019005789U1 (de) 2022-02-02
JP2021535515A (ja) 2021-12-16
US20210029057A1 (en) 2021-01-28

Similar Documents

Publication Publication Date Title
KR102445806B1 (ko) 이벤트 콘텐츠 전달
US10862989B2 (en) Push notification delivery system
US8140701B2 (en) Scalable dynamic content delivery and feedback system
US9397973B1 (en) Systems and methods for transferring message data
US9621958B2 (en) Deferred, on-demand loading of user presence within a real-time collaborative service
EP2736199A1 (en) Method and device for prompting dynamic information about contact person
KR20070005690A (ko) 네트워크 채팅 환경에서의 채팅 부하 관리 시스템 및 방법
CN103139051A (zh) 一种基于Websocket协议的即时通讯方法
US9531768B2 (en) Detection of shared content viewed by attendees in online meetings
US20140344411A1 (en) Method for delivering long polling push messages in a multi-server environment
US9110739B2 (en) Subscribing to multiple resources through a common connection
GB2484200A (en) Establishing a global conference using plural conference bridges
US8161113B2 (en) Rich signaling feedback mechanism for group communication
CN116308671A (zh) 基于mqtt协议的在线竞价方法、电子设备及存储介质
US20230108720A1 (en) Mitigating network resource contention
CN113168330A (zh) 客户端软件后退
US20240179221A1 (en) Mitigating network resource contention
Suciu et al. Cloud computing platform for applications in social-commercial area

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant