MQTT에서 클라이언트-서버 연결 설정에 대한 혼란


19

사양 에 따르면 항상 서버에 연결해야하는 클라이언트입니다.

고객:

MQTT를 사용하는 프로그램 또는 장치. 클라이언트는 항상 서버에 대한 네트워크 연결을 설정합니다 . 그것은 할 수 있습니다

  • 다른 고객이 관심을 가질만한 응용 프로그램 메시지 게시

  • 신청에 관심이있는 신청 메시지를 요청하십시오.

  • 애플리케이션 메시지 요청을 제거하려면 구독을 취소하십시오.

  • 서버에서 연결을 끊습니다.

이 클라이언트가 응용 프로그램 메시지를 구독하면 서버는 해당 메시지를이 특정 클라이언트로 전달해야합니다.

섬기는 사람:

응용 프로그램 메시지를 게시하는 클라이언트와 구독 한 클라이언트 간의 중재자 역할을하는 프로그램 또는 장치입니다. 서버

  • 클라이언트의 네트워크 연결을 수락합니다.

  • 클라이언트가 게시 한 응용 프로그램 메시지를 수락합니다.

  • 클라이언트의 요청을 구독 및 구독 취소합니다.

  • 클라이언트 구독과 일치하는 응용 프로그램 메시지를 전달합니다 .

이것은 클라이언트가 구독하는 경우 대부분 데이터 흐름이 없어도 구독이 유효한 동안 서버에 연결된 상태를 유지한다는 의미입니까?

구독 후 클라이언트 연결이 끊어지면 서버가 연결을 설정 해야하는 클라이언트이기 때문에 서버가 메시지를 전달할 수 없기 때문에이 결론에 도달합니다. 그러나 언제 다시 설정해야하는지 알 수 없습니다.

답변:


11

이것은 클라이언트가 구독하는 경우 대부분의 시간에 데이터 흐름이 없어도 구독이 유효한 동안 서버에 연결된 상태를 유지한다는 의미입니까?

예, 일단 연결되면 클라이언트는 메시지를 기다리지 만, keepalive 값에 따라 정기적으로 PING 메시지를 서버로 보냅니다. 서버가 PING 메시지를받지 못하면 연결이 끊어 질 수 있습니다.

클라이언트가 구독 후 연결을 끊으면 연결을 설정해야하는 클라이언트이므로 서버가 메시지를 전달할 수 없습니다.

클라이언트 연결이 끊긴 경우 예, 메시지를받지 않지만 MQTT에는이 문제를 해결하는 기능이 있습니다.

클라이언트가 'Clean session'플래그를 false로 설정하여 서버에 연결하면 서버는 해당 클라이언트 ID의 구독을 기억합니다. 클라이언트가 다시 연결되면 서버가 기억 했으므로 다시 구독 할 필요가 없습니다.

또한 QoS 수준 1 또는 2를 사용하여 가입 할 수 있습니다. 이러한 QoS 수준을 사용하면 서버는 메시지를 저장하고 클라이언트가 메시지를 보내기 전에 다시 연결될 때까지 기다립니다. 이렇게하면 클라이언트가 연결을 끊었다가 다시 연결하더라도 게시 된 모든 메시지를 계속받습니다.

이 사이트 에는 MQTT 프로토콜을 설명하는 유용한 자료가 있습니다.


9

이것은 클라이언트가 구독하는 경우 대부분의 시간에 데이터 흐름이 없어도 구독이 유효한 동안 서버에 연결된 상태를 유지한다는 의미입니까?

예, 고객이 메시지를 기다립니다.

... 가입 후 클라이언트 연결이 끊어지면 서버가 메시지를 전달할 수 없습니다

연결을 끊어야합니다 (특히 배터리 구동 장치에서). MQTT 의 " last will and testament "기능을 사용하여 수행 할 수 있습니다 . 장치 연결이 끊어지면 마지막 메시지가 전송됩니다.


1

연결과 세션을 구별해야합니다.

모든 것은 세션에 의해 정의됩니다. MQTT 연결이 브로커에 처음으로 권한 부여되면 브로커는 일반적으로 클라이언트 ID 연결 매개 변수를 기반으로이 연결에 대한 세션을 작성합니다.

연결 중 MQTT 3.1.1 프로토콜 (현재 대부분의 클라이언트 / 브로커에 기본값)에서 clean = true 또는 clean = false 플래그를 지정할 수 있습니다. clean = true이면 브로커가 자동으로 새 세션을 작성하고 연결이 끊어 지거나 닫힐 때 닫습니다. clean = false이면 브로커는 클라이언트 연결이 끊긴 경우에도 세션을 유지하고 이벤트를 어떤 종류의 세션 저장소로 전달합니다. clean = false 세션을 허용하는 경우 브로커 구현에 따라 다르며 해당 세션의 최대 ttl은 얼마입니까?

MQTT 5.0 프로토콜 (매우 신선하지만 원근법)에서는 클라이언트 측에서 세션 ttl을 지정하거나 연결 후 세션 ttl을 변경할 수 있습니다. 이는 불안정한 WAN 연결 (IoT 대부분) 또는 설명 된 상태 저장 연결에 매우 유용합니다.

클라이언트 관점에서 AFAIK 현재 MQTT 5.0 프로토콜과 파이썬에서 사용할 수있는 gmqtt 과와 자바 스크립트 mqtt.js .

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