MQTT와 웹 소켓의 차이점은 무엇이며 언제 사용해야합니까?


17

MQTT와 웹 소켓의 주요 차이점은 무엇입니까?

홈 자동화에 IoT를 사용하는 경우-Rest API 기반 및 브라우저 기반 액세스 가능성이 필요할 때 사용해야하는 여러 장치에 대한 액세스를 제어 및 모니터링합니다.

Raspberry Pi 2 B +에서 Java (Pi4J 라이브러리)를 사용하고 있습니다.

명암, 습도, PID 등과 같은 여러 센서를 설정했습니다.

필요한 경우 데이터를 보낼 수있는 클라우드 서버도 있습니다.


1
현재 및 미래의 모든 요구 사항을 명확하게 정의하여 사용할 것을 결정합니다. 그런 다음 요구 사항에 가장 적합한 기술을 보여주는 크로스 매트릭스를 생성합니다. 그런 다음 요구 사항을 충족시키기 위해 하나 이상의 기술을 사용하도록 선택합니다.

답변:


23

실제로 이러한 프로토콜을 전혀 비교할 수 없기 때문에 여기서의 질문 설정은 약간 오해의 소지가 있습니다. 그것들은 TCP 및 IP와 같으며 서로 겹쳐 있습니다. [1]

Websockets는 동일한 수준에있는 '경쟁 업체'RESTful http가 제공하지 않는 기능을 제공하기위한 저수준 프로토콜입니다. 모든 요청에서 항상 열고 닫을 필요가없는 항상 열려있는 채널입니다. [2]

MQTT는 데이터를 공개하거나 구독하는 간단한 방법을 제공합니다. 이러한 구독이 일종의 채널이지만 다른 유형의 채널이라는 혼동이있을 수 있습니다. MQTT에서 지속적으로 열린 연결을하려면 웹 소켓과 MQTT가 동시에 필요합니다.

IoT는 물론 모든 디자인에서 스트림이 필요한지 여부를 선택해야하고 (WebSockets vs RESTful) MQTT에 대해 앱에서 구독 및 게시 메커니즘을 원하는지 여부를 고려해야합니다.

어떤 상황에서는 일반적인 상황이 발생하면 WebSockets를 통한 MQTT를 고려할 수 있습니다. [삼]

질문에 대한 답변 :

Rasperry Pi와 여러 센서가 설치되어 있다고 가정합니다. 자체 컨트롤러로 센서가 Rasperry와 거리가 멀면 MQTT를 사용하여 데이터를 수집 할 수 있습니다. 클라우드에 데이터를 저장하려면 HTTP로 데이터를 보내십시오. 클라우드에서 휴식을 통해 데이터를 제공하십시오. [4]

웹 소켓의 경우 필요하지 않지만 유용하다고 생각되면 사용하십시오.

출처 :

[1] https://www.quora.com/What-are-the-pros-and-cons-of-WebSockets-versus-MQTT-as-real-time-web-infrastructure-for-the-Internet-of -소지품

[2] https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-understanding-the-difference/

[3] /programming/30624897/direct-mqtt-vs-mqtt-over-websocket

[4] http://www.theinternetofthings.eu/antonio-grasso-mqtt-vs-http-what-best-protocol-iot


3
마지막 요점과도 관련이 있습니다. 이 답변 은 Mosquitto MQTT 브로커 개발자 인 Roger Light의 답변 으로 원시 소켓의 사용 사례를 MQTT가있는 웹 소켓과 비교합니다.
Aurora0001

훌륭한 설명 인 mico에게 감사합니다. 그러나 나는 아직도 무엇을 사용해야하는지 잘 모르겠습니다. 내 시나리오에 무엇을 추천 하시겠습니까?
Shakti Phartiyal 17

3
좋은 대답이지만 "열기 및 닫기" WRT WS : // 대 HTTP : //를 사용하면 잘못 될 수 있습니다. 첫째, HTTP 1.1 요청은 파이프 라인 될 수 있으므로 리터럴 소켓 레벨에서 하나의 연결에는 그러한 의미로 열고 닫지 않고도 무한한 수의 요청을 포함 할 수 있습니다. 웹 소켓의 장점은 동기식 "요청 및 응답" 주기에 대한 약속이 없다는 것입니다 . 교환 규칙이 최소 인 개방형 양방향 채널이 있습니다.
goldilocks

"MQTT에서 지속적으로 열린 연결을하려면 웹 소켓과 MQTT가 동시에 필요합니다." 당신은 이것에 대해 확신합니까? 클라이언트가 PINGRESP 패킷을 계속 서버에 계속 공개 할 수있는 경우 MQTT가 "일정한 열린 연결"을 유지하기 위해 webSocket을 사용해야하는 이유를 설명하십시오. MQTT를 구현하는 클라이언트는 연결을 유지하기 위해 PINGRESP 패킷을 전송하고, webSocket을 암시하는 클라이언트는 keepAlive ()를 사용하여 빈 패킷 webSocket.send ( '')를 서버에 보내 연결을 유지합니다.
John

흠 .. 당신은 그 패킷과 연결을 유지할 수 있습니다 . MQTT가 TCP / IP (HTTP 아님)를 통해 작동한다는 것을 알았습니다. 이 경우 연결을 열린 채로 둘 수 있습니다.
mico

9

두 서버 모두 클라이언트가 폴링하지 않고 (HTTP에서와 같이) 서버가 데이터를 클라이언트에 즉시 전달할 수 있도록 전이중 통신을 할 수 있다는 점에서 비슷합니다.

그러나 웹 소켓은 클라이언트와 서버 간의 간단한 지점 간 연결을 위해 설계되었습니다. MQTT는 기본 메시지 전송 위에 추가 추상화를 계층화하여 여러 이해 당사자가 관심있는 메시지를 구독 할 수 있습니다. 따라서 많은 클라이언트가 명목 대기열을 공유 할 수 있도록 '메시지 주제'로 메시지를 라우팅 할 수 있습니다. 여기서 서버는 모든 클라이언트의 모든 메시지를 수신하도록 선택할 수 있지만 주제별로 필터링 할 수도 있습니다.

MQTT에는 가입자가 즉시 메시지를 수신 할 수 있도록 보존 된 메시지와 클라이언트가 비정상적으로 연결을 끊을 경우 자동으로 보낼 수있는 LWT (Last Will and Testament)와 같은 다양한 유용한 기능이 있습니다. 요약하면, MQTT는 단순한 웹 소켓이 제공하지 않는 기능과 추상화를 제공하는 '더 높은 스택'입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.