WhatsApp은 mqtt를 사용합니다
채팅 애플리케이션의 무대 뒤에서
사용중인 채팅 애플리케이션이 많이 있지만 사용자를 끌어들이는 자질 때문에 몇 명만 눈에 띄게. 최고의 채팅 앱 중 두 개는 Facebook Messenger와 WhatsApp으로 간주됩니다. 이 회사들은 응용 프로그램의 아키텍처에 대해 신중하지만 블로그 기사 및 포럼에서 비트와 정보를 찾을 수있었습니다. 이것은 그들의 구성이며, 이러한 모든 응용 프로그램이 자주 업데이트되는 경향이 있으므로 이러한 사실은 구식이 될 수 있습니다.
1. 페이스 북 메신저
Facebook의 메신저는 가장 인기있는 채팅 응용 프로그램 중 하나입니다. 몇 년 전, 메신저는 최고의 모양이 아니 었습니다. 성능과 공간 사용이 뒤쳐지기 시작했습니다. 메신저는 풀 기반 모델을 사용하고있었습니다. 앱이 새 메시지의 가용성에 대한 가벼운 푸시 알림으로 인정 될 때마다 앱은 대화보기가 포함 된 무거운 JSON 응답을 당기고받습니다. 그러나 나중에 Messenger가 푸시 기반 Snapshot + Delta 모델을 사용하도록 업데이트되었습니다.
키 포인트:
- 메신저는 성능 및 공간 사용 문제가있었습니다.
- 처음에는 메시지 검색을 위해 풀 기반 모델을 사용했습니다.
- 나중에 푸시 기반 스냅 샷 + 델타 모델로 전환되었습니다.
질문:
- 처음에 메신저의 문제는 무엇입니까??
- 메신저가 메시지 검색을 위해 어떤 모델로 전환 했습니까??
답변:
- 메신저는 성능 및 공간 사용 문제가있었습니다.
- 메신저는 풀 기반 모델에서 푸시 기반 스냅 샷 + 델타 모델로 전환되었습니다.
2. whatsapp
WhatsApp은 라임/리스 스택을 기반으로합니다.
WhatsApp의 비하인드 스토리에서 가장 매력적이고 중요한 것 중 하나는 Erlang에서 작성된 백엔드입니다. Erlang은 WhatsApp을 세계 최고의 채팅 앱 중 하나로 만드는 데 큰 기여를합니다.
“왜 Erlang?”
Erlang은 일반적인 목적, 동시 기능적 프로그래밍 언어입니다. Erlang이 유용한 것으로 알려진 영역은 메시지의 일부 측면이 주어진 많은 연결 및 라우팅 메시지를 처리하는 것입니다. Erlang은 이러한 시나리오에서 훌륭한 성능을 보여 주므로 대부분의 통신 관련 응용 프로그램은 구현에 Erlang을 사용합니다.
WhatsApp 서버의 초기 구현은 Erlang에서 작성된 오픈 소스 Jabber/XMPP Instant Messaging Server 인 Ejabberd를 사용하여 수행되었습니다. 구현에 사용되는 메시징 프로토콜은 XMPP입니다 (확장 메시징 및 존재 프로토콜).
채팅 응용 프로그램의 또 다른 중요한 측면은 데이터베이스입니다. 대부분의 경우 데이터베이스는 실시간 메시징 앱에서 성능 병목 현상이 될 수 있습니다. WhatsApp은 실시간 분산 커뮤니케이션 DBM으로 알려진 MNESIA를 사용합니다. MNENSIA의 중요한 측면 중 하나는 런타임에 재구성 될 수 있다는 것입니다.
WhatsApp은 Facebook Messenger와 같은 메신저 서비스와 비교할 때 상당히 단순한 것으로 간주되지만 디자인은 간단하지 않습니다. 다음 다이어그램은 WhatsApp 아키텍처에 대한 매우 추상적 인 견해를 보여줍니다.
WhatsApp 기반 홈 자동화 : MQTT를 사용한 프로토콜 브리징
이 기사에서는 WhatsApp을 지원하지 않고 MQTT, TCP, IMAP 등과 같은 다른 커뮤니케이션 프로토콜을 지원하는 장치를 제어 할 것입니다. WhatsApp을 지원하지 않는 홈 자동화 장치가있는 주택이 설치된 경우 이러한 장치에서 지원하는 프로토콜을 사용하여 이러한 장치 (컨트롤러)와 통신합니다. 따라서 우리는 해당 장치에 연결된 가정 기기를 제어 할 수 있습니다.
필요한 구성 요소 :
- 파이썬 기반 WhatsApp API -Yowsup
- MQTT 라이브러리 -Paho
- 파이썬 ID
- Arduino Ide
기술적 인 통찰력 :
프로토콜 브리징은 WhatsApp API를 지원하지 않는 장치를 제어 할 수 있습니다. 즉, 단순히 한 프로토콜에서 다른 프로토콜로 데이터를 보내는 것을 의미합니다. 이 기사는 장치를 제어하기위한 MQTT 및 WhatsApp 브리지를 보여줍니다.
블록 다이어그램 :
모든 통신은 Linux 기반 시스템에 설치된 Python 스크립트를 통해 이루어집니다. Python 스크립트에는 WhatsApp API 및 MQTT 라이브러리가 두 프로토콜과 통신 할 수 있습니다. 스크립트는 WhatsApp 및 MQTT에서 메시지를 보내고받을 수 있습니다.
질문:
- MQTT를 사용한 WhatsApp 기반 홈 자동화에 필요한 구성 요소는 무엇입니까??
- 홈 자동화에서 프로토콜 브리징의 목적은 무엇입니까??
답변:
- MQTT를 사용한 WhatsApp 기반 홈 자동화에 필요한 구성 요소는 Python 기반 WhatsApp API (YOWSUP), MQTT 라이브러리 (PAHO), Python ID 및 Arduino IDE입니다.
- 프로토콜 브리징은 하나의 프로토콜에서 데이터를 보내서 WhatsApp API를 지원하지 않는 장치의 통신 및 제어를 허용합니다 (E.g., MQTT) 다른 사람에게.
WhatsApp은 mqtt를 사용합니다
연결이 성공하면이를 사용하여 메시지를 보낼 수 있습니다
게시.단일 (주제, message_data, hostname =”브로커.hivemq.com”))
채팅 애플리케이션의 무대 뒤에서
채팅 애플리케이션이 많이 있습니다. 그러나 사용자를 끌어들이는 자질 때문에 눈에 띄는 사람은 거의 없습니다. 이 최고의 채팅 앱 중 두 개는 Facebook Messenger와 WhatsApp으로 간주됩니다. 이 회사들은 응용 프로그램의 아키텍처에 대해 개별적이지만 블로그 기사 및 포럼에서 비트와 정보를 찾을 수있었습니다. 이것은 그들의 구성이며, 이러한 모든 응용 프로그램이 자주 업데이트되는 경향이 있기 때문에 이러한 사실은 구식이 될 수 있습니다.
1. 페이스 북 메신저
페이스 북’S Messenger는 가장 인기있는 채팅 응용 프로그램 중 하나입니다. 몇 년 전, 메신저는 아니었다’그것에 t’가장 좋은 모양. 그것’S 성능 및 공간 사용이 뒤쳐지기 시작했습니다. 메신저는 풀 기반 모델을 사용하고있었습니다. 매번 앱은 새 메시지의 가용성에 대한 가벼운 푸시 알림으로 인정 된 다음 앱은 대화보기가 포함 된 무거운 JSON 응답을 당기고받습니다. 그러나 나중에 Messenger는 푸시 기반 Snapshot + Delta 모델을 사용하도록 업데이트되었습니다.
MQTT는 M2M (Machine-to-Machine) 연결 프로토콜입니다. 매우 가벼운 게시/가입 메시징 전송으로 설계되었습니다 – MQTT.org
메신저 인프라에서 수행 된 또 다른 흥미로운 변화는 JSON에서 절약. 이 주요 변화는 페이로드 크기를 50% 줄였습니다.
Sever Side에서도 상당한 개선이 이루어졌습니다. 이전 메시지는 메신저를 보내기 전에 전통적인 스토리지 계층에 기록되었습니다. 그러나 프로세스는 Facebook 자체가 작성한 순서 대기열 구현을 사용하여 완전히 대체되었습니다 “아이리스”. 아이리스의 흥미로운 특징 중 하나는 메신저와 스토리지 계층 간의 메시지 동기화를 용이하게하는 포인터 사용입니다. 다음 이미지는 메신저에서 메시지 동기화가 어떻게 발생하는지 명확하게 보여줍니다
위에서 설명한 절차는 사용중인 스토리지 계층의 가용성 및 쓰기 속도에 대한 메시지 전달의 종속성을 제거 할 수있었습니다. 아이리스는 메시지를 일시적으로 저장합니다’모든 메시지가 제대로 동기화 될 때까지 스토리지를 뒷받침합니다.
또 다른 흥미로운 사실은 Iris의 백업 스토리지가 MySQL 및 Flash를 사용하여 구축되었다는 것입니다.
2. whatsapp
WhatsApp은 라임/리스 스택을 기반으로합니다.
WhatsApp의 뒤에서 가장 매혹적인 것 중 하나는 Erlang에서 작성된 백엔드입니다. Erlang은 WhatsApp을 세계 최고의 채팅 앱 중 하나로 만드는 데 큰 기여를합니다.
왜 Erlang ?
Erlang은 일반적인 목적, 동시 기능적 프로그래밍 언어입니다. Erlang이 유용한 것으로 알려진 영역은 다음과 같습니다
> 많은 연결을 처리합니다
> 메시지의 일부 측면이 주어진 라우팅 메시지
Erlang은 주어진 시나리오에서 훌륭한 성능을 보여 주므로 대부분의 통신 관련 응용 프로그램은 구현에 Erlang을 사용합니다.
WhatsApp 서버의 초기 구현은 Ejabberd를 사용하여 수행되었습니다. Erlang에서 작성된 오픈 소스 Jabber/XMPP 인스턴트 메시징 서버입니다. 구현에 사용 된 메시징 프로토콜은 XMPP입니다 (확장 메시징 및 존재 프로토콜).
채팅 응용 프로그램의 또 다른 중요한 측면은 데이터베이스입니다. 대부분의 경우 데이터베이스는 실시간 메시징 앱에서 성능 병목 현상이 될 수 있습니다. WhatsApp은 실시간 분산 커뮤니케이션 DBM으로 알려진 MNESIA를 사용합니다. MNENSIA의 중요한 측면 중 하나는 런타임에 재구성 될 수 있다는 것입니다.
WhatsApp은 Facebook Messenger와 같은 메신저 서비스와 비교할 때 상당히 단순한 것으로 간주되지만’S 디자인입니다’t 간단한 것. 다음 다이어그램은 WhatsApp 아키텍처에 대한 매우 추상적 인 견해를 보여줍니다,
WhatsApp 기반 홈 자동화 : MQTT를 사용한 프로토콜 브리징
이 기사에서는 WhatsApp을 지원하지 않고 MQTT, TCP, IMAP 등과 같은 다른 커뮤니케이션 프로토콜을 지원하는 장치를 제어 할 것입니다. WhatsApp을 지원하지 않는 홈 자동화 장치가있는 주택이 설치된 경우 이러한 장치에서 지원하는 프로토콜을 사용하여 이러한 장치 (컨트롤러)와 통신합니다.
따라서 우리는 해당 장치에 연결된 가정 기기를 제어 할 수 있습니다.
구성 요소가 필요합니다
필요한 도구/ 라이브러리가 필요합니다
파이썬 기반 WhatsApp API-Yowsup
MQTT 라이브러리 – Paho
파이썬 ID
Arduino Ide
기술적 인 통찰력
프로토콜 브리징은 WhatsApp API를 지원하지 않는 장치를 제어 할 수 있습니다. 즉, 단순히 한 프로토콜에서 다른 프로토콜로 데이터를 보내는 것을 의미합니다. 이 기사는 장치를 제어하기위한 MQTT 및 WhatsApp 브리지를 보여줍니다.
블록 다이어그램
그림 1 WhatsApp 및 MQTT 프로토콜 브리징
모든 통신은 Linux 기반 시스템에 설치된 Python 스크립트를 통해 이루어집니다. Python 스크립트에는 WhatsApp API 및 MQTT 라이브러리가 두 프로토콜과 통신 할 수 있습니다.
스크립트는 WhatsApp 및 MQTT에서 메시지를 보내고받을 수 있습니다.
마이크로 컨트롤러 (ATMEGA 328P)는 릴레이 회로를 통해 홈 어플라이언스에 연결됩니다. 커뮤니케이션 목적으로 ESP는 마이크로 컨트롤러에 연결됩니다.
ESP는 특정 주제에 대한 메시지를 수신하고 Serial UART를 통해 마이크로 컨트롤러에 명령을 보낸 코드로 설치됩니다.
이제 사용자가 WhatsApp에서 메시지를 보내면 파이썬 스크립트를 통해 마이크로 컨트롤러로 이동합니다.
회로도
이 보드는 릴레이 회로가있는 라이트 스위치에 연결되어 있습니다. 우리는 또한 맞춤형 보드 328 보드 대신 Arduino UNO 보드를 가져갈 수 있습니다.
시스템의 작동 방식
사용자가 WhatsApp에서 Linux 시스템에 메시지를 보내면 스크립트가 메시지를 읽습니다. MQTT 프로토콜을 지원하는 IoT 장치는 특정 주제의 메시지를 듣습니다. 이 메시지는 장치에 어플라이언스를 켜고 끄도록 명령합니다.
이제 파이썬 스크립트에서 읽은 메시지는 찾은 경우 명령에 대해 스캔됩니다. 특정 명령은 MQTT 프로토콜의 장치로 전송됩니다. 장치가 해당 명령을 읽으면 핀을 높이 (ON), 낮게 (OFF)로 돌려 행동합니다
소스 코드 이해
우리는 Arduino + ESP 용으로, 다른 하나는 Linux에 설치된 Python 스크립트 용 소스 코드의 두 가지 유형을 가지고 있습니다.
Arduino 코드
Arduino는 Serial에 대한 데이터를 수신하는 코드로 설치됩니다. 특정 스트링을받을 때 “에” 릴레이 핀을 켜고 (높음) 수신 할 때 “끄다” 릴레이가 꺼집니다.
if (rec == “에”))
DigitalWrite (릴레이, 높은);
연속물.인쇄(“릴레이가 켜져 있습니다”);
rec = “”;
>
if (rec == “끄다”))
DigitalWrite (릴레이, 낮음);
연속물.인쇄(“릴레이가 꺼져 있습니다”);
rec = “”;
>
ESP 코드
ESP는 직렬 포트에서 Arduino와 연결되어 있으며 MQTT 주제에 구독하여 데이터를 수신합니다. 기본적으로 MQTT 주제에서 수신 한 데이터를 직렬 포트로 보내고 직렬에서 MQTT 주제로 데이터를 보냅니다.
ESP 및 MQTT에 대한 자세한 내용은 이전 기사를 참조하십시오.
파이썬 스크립트 코드
파이썬 스크립트가 설치되어 있습니다 “yowsup” WhatsApp API를 읽고 WhatsApp에서 메시지를 보냅니다. 이 스크립트에는 두 개의 파일이 있습니다 달리다.파이 그리고 층.파이.
파일 실행 이해.파이
파일 상단에 라이브러리를 호출 할 것입니다
Yowsup에서.스택 스택 yowstackbuilder를 가져옵니다
Yowsup에서.레이어.인증 import Autherror
Yowsup에서.층을 yowlayerevent를 가져옵니다
Yowsup에서.레이어.네트워크 가져 오기 yowetworklayer
Yowsup에서.env import yowsupenv
메인 클래스이기 때문에 맨 위에 레이어 파일을 첨부합니다 “에코 레이” 해당 파일 내부에 존재합니다.
계층 가져 오기 echolayer에서
우리는 레이어 파일의 이름을 지정할 수 있지만 여기에 같은 이름을 넣어야합니다.
내부 파이, 우리는 비밀번호 및 이벤트에 대한 주요 변수를 선언 할 것입니다.
자격 증명 = (“91xxxxxxxxxx”, “hkhwvw5/wnr493hxk8nkl/htpno =”))
이제 우리는 그것들을 레이어로 전달하고 스택을 만듭니다. 또한 연결을 실시간으로 유지할 루프를 호출합니다.
스택.setcredentials (자격 증명)
스택.BroadcastEvent (yowlayerevent (yownetworklayer.event_state_connect)) #Connect Seigns를 중단합니다
스택.LOOP () #this는 프로그램 MainLoop입니다
파일 계층 이해.파이
이 파일에는 MQTT 용 프로토콜 라이브러리가 포함되어 있으며 WhatsApp에서 메시지를 수신 할 수 있습니다.
WhatsApp에서 메시지를받는 방법을 과소 평가합니다
이 파일에는이 번호로 들어오는 메시지를 수신 할 클래스가 포함되어 있으며 콜백 엔티티가되어 다른 루프가 파일 내부에서 실행될 수 있습니다.
@protocolentityCallback (“메시지”))
def onmessage (self, messageProtocolentity) :
만약 사실이라면:
메시지가 온 메시지 데이터 및 번호 양식은 아래에서 얻을 수 있습니다.
incomming_message_data = MessageProtocolentity.getbody ()
이것은 실제 메시지 인 메시지 본문을 얻을 것입니다. 문자열 변수에 저장됩니다 “incomming_message_data”
incomming_message_sender = MessageProtocolentity.getfrom ()
이 줄은 들어오는 메시지 연락처를 문자열 변수에 저장합니다 “incomming_message_sender”
전송 및 수신을위한 MQTT 레이어 이해
우선, 우리는 MQTT에 필요한 라이브러리를 가져올 것입니다.
PAHO 가져 오기.MQTT.MQTT로 클라이언트
PAHO 가져 오기.MQTT.게시로 게시하십시오
이제 우리는 mqtt client와 함께 클라이언트라는 변수를 선언합니다.
클라이언트 = mqtt.고객()
이제 우리는 두 가지 함수 콜백을 만들 것입니다 1. 메시지 수신의 경우 2. 연결에 대한 무언가를 성공적으로 수행합니다.
고객.on_connect = on_connect
고객.on_message = on_message
마지막으로 포트의 MQTT 브로커에 연결하고 비 차단 루프 내부에서 클라이언트를 시작합니다
고객.연결하다(“브로커.hivemq.com”, 1883, 60)
고객.loop_start ()
연결이 성공하면이를 사용하여 메시지를 보낼 수 있습니다
게시.단일 (주제, message_data, hostname =”브로커.hivemq.com”))
WhatsApp에서 메시지가 수신되면 문자열에 저장된 다음 해당 메시지를 명령으로 정의하는 일부 키워드에 대해 문자열이 스캔됩니다.
엘리프 (elif)“불을 켜다” incomming_msg) : #일치시 무언가를하십시오
조건이 일치하는 경우 관리 명령을 MQTT 브로커에 보냅니다.
게시.하나의(“TS/조명”, “에”, hostname =”브로커.hivemq.com”))
인식되지 않은 메시지가 접수되면 WhatsApp의 메시지는 이것이 유효하지 않다고 대답합니다.
그리고 이것이 WhatsApp로 장치를 제어하기 위해 프로토콜 브리징을 사용할 수있는 방법입니다.
xanecs/xiom
이 커밋은이 저장소의 어떤 지점에도 속하지 않으며, 저장소 외부의 포크에 속할 수 있습니다.
스위치 브랜치/태그
지점 태그
분기를로드 할 수 없었습니다
보여줄 것이 없습니다
태그를로드 할 수 없습니다
보여줄 것이 없습니다
이미 사용중인 이름입니다
제공된 지점 이름이 이미 존재합니다. 많은 git 명령은 태그와 분기 이름을 모두 받아들이 므로이 분기를 만드는 것이 예기치 않은 동작을 유발할 수 있습니다. 이 지점을 만들고 싶습니까??
취소 생성
- 현지의
- Codespaces
https github cli
웹 URL을 사용하여 SVN과 함께 git 또는 체크 아웃 사용.
공식 CLI와 함께 빨리 일하십시오. CLI에 대해 자세히 알아보십시오.
필요한 로그인
Codespace를 사용하려면 로그인하십시오.
Github 데스크탑을 시작합니다
아무 일이 발생하지 않으면 Github 데스크탑을 다운로드하고 다시 시도하십시오.
Github 데스크탑을 시작합니다
아무 일이 발생하지 않으면 Github 데스크탑을 다운로드하고 다시 시도하십시오.
Xcode를 시작합니다
아무 일이 발생하지 않으면 Xcode를 다운로드하고 다시 시도하십시오.
Visual Studio 코드 시작
Codespace가 준비된 후에 열립니다.
Codespace를 준비하는 데 문제가있었습니다. 다시 시도하십시오.
최신 커밋
git 통계
파일
최신 커밋 정보를로드하지 못했습니다.
최신 커밋 메시지
시간을 투입하십시오
readme.MD
Axiom은 MQTT 서버에 연결하고 WhatsApp 메시징 서비스에 대한 인터페이스를 제공하는 Python 프로그램입니다.
- 이 저장소를 복제하십시오.
- 종속성을 설치하십시오
PIP 설치 YOWSUP2 PAHO-MQTT
- Waserver/Config 편집.파이 . Yowsup2 CLI에서 자격 증명이 필요할 수 있습니다. 여기를 보아라.
- 달리다
Python Waserver/Waserver.파이
- Waserver/Config-Prod를 만듭니다.파이
- 제공된 dockerfile으로 이미지를 빌드합니다 . 별도의 구성 파일은 다른 개발자/생산 구성을 허용합니다.
메시지를 받으려면 WhatsApp/Incoming을 구독하십시오 . 메시지는 다음과 같습니다
< "핸드폰": "4915112345678", "메시지": "인간에게서 안녕하세요!" >
이 예제의 전화 번호는 일반적으로 철자 +49 151 12345678입니다 . 그룹 메시지의 경우 전화 번호는 양식 4915112345678-1400000000 (그룹 제작자의 전화 번호 및 UNIX 타임 스탬프 생성)입니다.
메시지를 보내려면 WhatsApp/Outgeing에 게시하십시오
< "핸드폰": "4915112345678", "메시지": "봇에서 안녕하세요!" >
현재 명령 구현이 있습니다
그룹 정보 (회원, 제목)를 받으려면 WhatsApp/CMD에 게시하십시오
< "CMD": "group_info", "핸드폰": "4915112345678-1400000000", "콜백": "any_string_here" >
콜백은이 명령에 대한 응답을 식별하는 데 사용됩니다. 이를 위해 UUID를 사용하는 것이 좋습니다. 응답은 WhatsApp/IQ 주제에 게시됩니다
< "CMD": "group_info", "콜백": "any_string_here", "GroupId": "4915112345678-1400000000", "참가자들": < "4915112345678": "관리자", "4915187654321": 없는, >, "주제": "예제 그룹" >
에 대한
WhatsApp 메시징 서비스를위한 MQTT 인터페이스
WhatsApp은 메시지를 어떻게 대기합니까??
엘로, 메이트! 그것’몇 달 안에 거의 2 년의 유행성이 될 것이며, 우리가 우리의 생활 방식을 조정하는 방식, 오,! 우리는 모두 연결되어 있었고 심지어 다양한 메시징 플랫폼을 사용하여 작업을 완료했습니다. Whatsapp, Instagram 및 Facebook을 포함한 여러 플랫폼의 사용이 크게 증가했습니다. WhatsApp은 사용량이 가장 높은 사람이었고 인도는 WhatsApp입니다’올해 가장 큰 시장! 그러나 WhatsApp은 매우 기본적인 데이터 구조 중 하나 인 큐를 사용하는 것을 알고 있습니까??
대기열이란 무엇입니까??
이름에서 알 수 있듯이 대기열은 실제 생활과 똑같습니다. 대기열에는 두 개의 끝, 머리와 꼬리가 있으며, 항목은 꼬리 끝에만 추가되어 헤드 엔드에서 제거됩니다. 피자를 받기 위해 줄을 기다리는 사람들과 그곳에 도착한 첫 번째 사람을 상상해보십시오.이자형., 첫 번째 라인은 선호도가 주어지며 피자를 받거나 “밀어 냈다.” 이 개념은 기술적으로 FIFO 또는 FIRST Out에서 첫 번째로 알려져 있습니다.
메시지 대기열이란 무엇입니까??
제목을 나타내는 것처럼 메시지 대기열은 메시지로 가득 찬 대기열입니다. 이 비동기 서비스는 두 사람 또는 한 그룹간에 메시지 나 데이터를 전송하는 데 사용됩니다. 메시지를 대기열에 보내는 사람은 프로듀서이고 메시지를받는 사람은 소비자입니다. 대기열에서’S의 관점에서, 메시지는 바이트 모음 일 뿐이며 일반 문자 메시지 나 고객이 포함 된 메시지에서 나올 수 있습니다’s 순서 ID 또는 오류 메시지.
- 메시지 대기열 시스템에는 중개인으로 알려진 여러 서버가 있습니다. 이 중개인은 매우 신뢰할 수 있고 확장 가능하며 클러스터를 형성합니다. 제작자 쪽에서 메시지가 생성되거나 전송되면 소비자가 메시지를받을 수있을 때까지 메시지가 메시지 대기열에 저장됩니다.
- 소비자 또는 수신자가 메시지를받을 수있게되면 대기열은 메시지를 소비자에게 푸시하고 소비자가 메시지를 완전히 처리하기를 기다립니다.
- 소비자가 메시지를 처리 한 후에는 대기열에서 완전히 삭제됩니다.
메시지 대기열 솔루션
메시지 대기열에 사용되는 여러 개의 오픈 소스 및 무료 소프트웨어가 있습니다.
카프카: Apache Kafka’S 메시징 시스템은 잘 고려한 출판 서문 시스템이며 매우 많은 양의 데이터를 처리 할 수있는 대기열 시스템입니다. Kafka는 결함 내성이며 다양한 서비스를 통해 노드를 지속적으로 모니터링하므로 작업하는 것이 효율적입니다.
토끼 MQ : RabbitMQ는 원래 AMQP (Advanced Message Queuing Protocol)를 구현 한 가장 많이 사용되는 오픈 소스 메시징 브로커 시스템 중 하나입니다. 대기열은이 시스템의 단일 스레드이며 하나의 큐는 최대 50,000 개의 메시지를 처리 할 수 있습니다.
아마존 SQS : Amazon Simple Queue Service는 메시지 대기열을 유지하지 않고 다양한 마이크로 서비스 및 응용 프로그램을 분리하는 데 사용되는 분산 메시지 대기열. Amazon SQS는 또한 사용자가 일반 프로그래밍 언어를 사용하여 액세스 할 수있는 웹 서비스 API를 제공합니다.
activemq : ActiveMQ는 Java로 작성된 또 다른 메시지 브로커 시스템이며 전체 Java 메시지 서비스 클라이언트가 있습니다. Ajax가 내장되어 있으며 REST 지원이 있으며 AMQP, MQTT, Stomp 등과 같은 다양한 프로토콜을 지원합니다.
WhatsApp은 어떻게 메시지를 전달합니까??
WhatsApp에서 메시지가 어떻게 대기되는지에 들어가기 전에’앱 자체를 이해합니다. Erlang 프로그래밍 언어를 사용하여 코딩 된 WhatsApp은 월간 거의 20 억 명이 가장 많이 사용됩니다. WhatsApp은 오픈 소스 확장 메시징 및 XMPP (Presence Protocol)를 사용하여 두 당사자 간의 즉각적인 메시지를 용이하게합니다. 처음에 WhatsApp은 ejabbered 서버를 사용하여 시작했습니다. 매일 많은 사용자가 있으면 서버가로드를 효율적으로 처리하고 시스템이 신뢰할 수 있어야합니다. 수년 동안이 코드는 XMPP에서 내부적으로 설계된 프로토콜로 전환하여 일부 핵심 구성 요소를 수정하여 최적의 서버 성능을 향상시키고 달성하기 위해 일부 핵심 구성 요소를 수정했습니다.
메시지를 보낼 때 수신기 가이 메시지를 검색하기 위해 다시 연결 될 때까지 서버에서 대기됩니다. 그래서 당신이 당신의 친구에게 문자를 보내고, 그들이’T 메시지를 받기 위해 인터넷에 액세스 하고이 메시지는 WhatsApp 서버의 대기열 이며이 프로세스는 다음으로 알려져 있습니다 “저장 및 앞으로” 기구. 수신기가 메시지를 수락 할 때만 서버에서 삭제하고 큐에서 삭제됩니다. 나중에 수신기에 인터넷이 연결되어 있으면 이러한 메시지가 제공되거나 수신기가 검색합니다. 수신기가 마지막으로 메시지가 수신되었음을 확인하면 메시지의 성공적인 검색이 WhatsApp 서버로 다시 전송되며 이것은 메시지 옆에 Double Tick 마크가 표시 될 때입니다.
이 데이터 구조는 길어지고 이것을 잘 이해하면 먼 길을 갈 것입니다. 다음에 선생님이 데이터 구조에 대해 논의하기 시작할 때, 그곳에서 좋은주의를 기울이십시오. 응? 좋아요?
그럼 다음에 뵙겠습니다!