MQTT는 항상 연결되고 4G 데이터로드


10

4G / WiFi 라우터 / 모뎀을 통해 브로커 (모스키토)에 연결된 수천 개의 MQTT 클라이언트와 관련된 IoT 프로젝트를 진행하고 있습니다. 10 개 미만의 클라이언트가 동일한 라우터에 연결되어 있으며 라우터는 다른 장소 (도시마다 다름)에서 나옵니다.

현재 우리는 클라이언트가 거의 없으며 항상 브로커와 연결되어 있습니다. 나는이 토론 에서 그들이 1000+ 단위까지 자랄 때 아무 문제가 없을 것이라는 것을 안다 .

제 질문은 4G 연결의 트래픽로드에 관한 것입니다. 최종 사용자는 모든 "채널"이 열려 있고 사용되지 않은 데이터 소비에 대해 두려워합니다. 활동이 없을 때 이해하는 한 keep-alive 패킷 만 전송 되지만 MQTT 문서 에서이 정보를 확실히 찾을 수는 없습니다.

패킷이 게시되지 않은 경우 트래픽이 무시해도된다고 가정 할 수 있습니까?

답변:


6

MQTT 스펙 은 연결 유지 트랜잭션을 구성하는 PINGREQPINGRESP 패킷 의 세부 사항을 나열합니다 .

각 크기는 2 바이트에 불과하므로 전체 연결 유지 이벤트는 총 4 바이트를 사용합니다. 연결이 끊어 졌음을 얼마나 빨리 알 필요가 있는지에 따라 각 클라이언트에 대해 keep-alive 패킷이 전송되는 빈도를 제어 할 수 있으므로 실제로 메시지가 게시되지 않을 때 사용되는 데이터 양을 완전히 제어 할 수 있습니다.

데이터로드를 훨씬 더 줄이려면 10 개의 장치가 연결되는 4G 라우터 전에 중앙 브로커로 브리지되는 별도의 브로커를 실행할 수 있습니다. 이렇게하면 연결 유지 패킷 수가 클라이언트 당 1 개가 아닌 4G 라우터 당 1 개로 줄어 듭니다. 이는 링크가 끊어지면 10 개의 로컬 장치가 서로간에 메시지를 계속 전달할 수 있다는 장점이 있으며, 보관 된 메시지 / 마지막 메시지 및 Testement 메시지를 사용하여 개별 클라이언트가 다운되는시기를 추적 할 수 있습니다.


중간 브로커를 사용하는 것이 좋은 조언이지만,이 특정 경우에 맞지 않을까 걱정됩니다. 그래도 유용합니다!
Mark

어쨌든, 나는 PINGREQ / RESP의 동작을 알고 있었지만, 찾지 못한 것은 실제 활동 이 없을 때 교환 되는 유일한 패킷 이라는 것입니다 (즉, 사용자 응용 프로그램에 의해 시작됨). 귀하의 답변에서 이것을 추론 할 수는 있지만 문서에는 명시 적으로 언급되어 있지 않습니다.
Mark

사양이 내 머리 위로 떨어져 있다고 곳에 연결 유지 타이머는 패킷이 수신 될 때마다 재설정, 난 기억이 안나
hardillb

2
메시지 당 2 바이트에 대해 이야기하지 않는 경우 로컬 브로커를 도입하라는 제안이 더 의미가 있지만 TCP / IP로 인해 메시지 당 42 바이트와 비슷하므로 한 번의 핑주기 동안 84 개입니다.
xwoker

1
@Mark 메시지가 전송되지 않은 경우 Ping 패킷 만 전송된다는 사실은이 표 뒤에 나오는 문장에 의해 암시됩니다. docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/…
hardillb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.