XML이 장황하다고 말할 수는 있지만,이 장황한 내용이 의미론을 캡슐화하기 때문에 내용과 관련하여 모든 "오버 헤드"가 아니라는 점을 염두에 두어야합니다. 정적 구조가 아닌 역 동성을 강조하는 프로토콜의 증상은 오버 헤드입니다. 예를 들어 HTML은 실제로 컨텐츠의 한 측면으로 간주 될 수있는 동적 구조, 구조를 사용하여 컨텐츠를 전달하는 편안한 XML 형식입니다. 테이블의 내용을 테이블 자체와 구별 할 수 있지만 내용이 특정 관계를 갖는 테이블 형식의 데이터라는 사실은 내용에 필수적입니다. 방금 각 셀을 가져 와서 하나의 긴 문자열로 전송하면 해당 구조와 관계가 사라져서 정보를 잃어 버렸습니까?
타블로 어 데이터를 구성 할 수있는 8 바이트 메시지를 생각해 봅시다. 매우 정적 인 프로토콜을 사용하는 경우 최소한 다음과 같은 프로토콜을 정의하여 추가 오버 헤드없이 전송할 수 있습니다.
- 각 메시지는 정확히 8 바이트이므로 길이를 나타내거나 종료 시퀀스를 포함 할 필요가 없습니다.
- 8 바이트는 항상 각 셀에 16 비트 값이 포함 된 2 x 2 그리드를 나타냅니다.
모든 메시지가 정확히 그런 경우 XML, HTML 또는 XMPP를 사용하는 것은 어리석은 것으로 간주 될 수 있습니다. 어쨌든 항상 동일하고 미리 결정된 구조적 구성 요소에 대역폭을 낭비하고 있으며,이를 작성하고 구문 분석하는 양쪽 끝에 해당 계산 시간을 낭비하고 있습니다. 각 셀에 두 개의 문자가있는 2 x 2 테이블 만 포함 된 최소의 적절한 HTML 페이지는 서식 및 프로토콜 오버 헤드를 수용하기 위해 최소 100 바이트가 될 것입니다.
그러나, 모든 메시지가 정확히 그런 것이 아니라면, 어떤 종류의 메시지인지 지정하는 것은 "페이로드"의 문자적인 부분이 아닐 수 있지만 컨텐츠 측면에서 필요한 구성 요소입니다. 나는 여분의 2 바이트로 그렇게 할 수 있고 훨씬 더 역동적 인 것을 소개 할 수 있습니다.
- 메시지는 이제 가변 길이 (0-255 바이트)이며 첫 번째 바이트는 길이를 나타냅니다.
- 미리 정의 된 다른 메시지 유형에 대해 최대 256 개의 코드가 있으며 그 중 하나는 "2 x 2 테이블"이며 두 번째 바이트입니다.
이제 8 바이트의 테이블 내용에 2 바이트의 오버 헤드가 필요하지만이 사용자 지정 프로토콜을 사용하여 어떤 종류의 메시지를 보낼 수 있는지에 대한 가능성은 훨씬 더 넓습니다.
그것은 여전히 HTML 페이지 또는 XML 네임 스페이스 사양 (또는 XMPP가 본질적으로있는 것 ) 의 가능성에 가깝습니다 .
따라서, 당신이 주로하는 일이 간단한 8 바이트 메시지를 보내는 것이라면, XMPP는 아마도 과잉 일 것입니다. 그러나 반드시 그런 것은 아닙니다. "IOT 연결 장치에서 서버로 1 바이트의 데이터를 전송하기위한 단일 요청 / 응답 교환이 0.5kB 이상"이라는 주장은 관련 RFC 에 대해 과장되어 잠재적 인 과장된 것으로 보입니다. 나는 그것을 보았습니다 .XMPP를 구현하거나 사용하지 않았습니다). 나는 당신이 그러한 예를 만들 수 있다는 것을 의심하지는 않지만 아마도 최소한의 예 는 아닙니다 .
프로토콜은 TCP 지향적이므로 " 'jabber : client'네임 스페이스로 규정 된 XML 스트림"을 설정하는 것은 우리가 한 가지 일을하는 경우에만 메시지의 일부로 간주하면됩니다. 장치는 서버에 연결하여 8 바이트를 보내고 데이터 연결이 끊어집니다. 관계가보다 영구적이며 종종 IoT 상황에있을 경우 장치가 대상에 이미 연결되어 있다고 가정 할 수 있습니다. 이 경우, 메시지의 최종 목적지가 서버 인 경우 (다른 클라이언트와 달리 서버가 메시지를 전달할 경우) 프로토콜 오버 헤드가 최소화됩니다.
<message><body>8 bytes.</body></message>
33 바이트의 "오버 헤드" 여기서 XML은 텍스트라는 점을 지적 할 필요가 있습니다. 따라서 메시지가 종종 바이너리 인 경우 데이터가 인코딩되어야 (예 : base64 ) 더 많은 오버 헤드와 계산을 추가 해야하기 때문에 훨씬 덜 적합해질 것입니다 요구 사항.
따라서 궁극적으로 :
XMPP가 짧고 빈번한 메시지를 보내는 IoT 장치에 대한 오버 헤드가 크나요?
지속적인 연결이 있고 메시지가 대부분 구조화되어 있지 않다면 그렇게 생각하지 않습니다. 그러나 그것이 제공하는 것 (구조와 관련된 역 동성)이 필요하지 않다면 아마도 더 적절한 방법론이있을 것입니다.
이를 위해 단일 중앙 서버가 다양한 장치간에 메시지를 처리 및 / 또는 의존하는 컨텍스트가있는 경우 해당 장치 중 하나가 수행하는 작업이 항상 간단하고 간단하더라도 다양한 메시지가 여전히 유용합니다. 클라이언트 장치에 제한된 리소스가있는 경우 많은 프로토콜을 하드 코딩 할 수 있으며 각 끝에서 각 메시지를 래핑하는 것은 매우 간단한 작업이됩니다. HTTP 서버를 배포하는 많은 IoT 장치가 그렇게합니다 ( "단순 클라이언트, 복잡한 서버"의 반대). 이러한 서버는 어떤 형식의 HTTP 요청도 처리 할 수 없으며 (사전 형식화 된 거부를 제외하고) 수행 할 작업과 응답이 매우 잘 정의되어 있고 집중적이지만 일련의 HTTP 요청은 HTTP 서버처럼 올바르게 작동하므로,