Booil Jung

Rust 기반 상업용 드론 관제 시스템을 위한 통신 프로토콜 타당성 분석 보고서

본 보고서는 Rust로 개발되는 상업용 드론 관제 시스템의 서버와 조종기 간 통신 계층에 Socket.IO를 적용하는 것에 대한 기술적 타당성을 심층 분석합니다. 분석 결과, Socket.IO는 웹 애플리케이션 개발에 있어 뛰어난 개발자 경험과 안정성 기능을 제공하지만, 상업용 드론의 안전 필수적인 명령 및 제어(Command and Control, C2) 링크의 주 프로토콜로는 부적합하다는 결론에 도달했습니다. 이는 Socket.IO의 본질적인 추상화, 성능 오버헤드, 그리고 예측 불가능한 폴백(fallback) 메커니즘이 상업용 드론이 요구하는 엄격한 실시간성과 결정론적 동작 요구사항과 근본적으로 상충하기 때문입니다.

보고서는 Socket.IO의 대안으로 원시 웹소켓(Raw WebSocket), gRPC, MQTT, 그리고 드론 산업의 사실상 표준인 MAVLink를 포함한 여러 프로토콜을 종합적으로 평가했습니다. 각 프로토콜은 C2 통신에 요구되는 저지연성, 신뢰성, 보안 및 효율성 측면에서 면밀히 검토되었습니다.

본 보고서의 핵심 권장사항은 MAVLink와 같은 검증된 바이너리 드론 프로토콜을 웹소켓이나 gRPC와 같은 고성능 최신 전송 프로토콜로 캡슐화하는 하이브리드 아키텍처 접근 방식입니다. 이 아키텍처는 최신 네트워크 기술이 제공하는 보안 및 연결 관리의 이점과 드론 영역에 특화된 프로토콜의 효율성 및 신뢰성을 결합하여, 안전성과 성능을 극대화하는 가장 강력한 솔루션입니다.

만약 하이브리드 접근이 아닌 단일 프로토콜을 고려한다면, 원시 웹소켓이나 gRPC가 차선책이 될 수 있으나, 이는 MAVLink가 제공하는 방대한 표준 메시지 세트를 자체적으로 구현해야 하는 부담을 동반합니다. 궁극적으로, 통신 프로토콜의 선택은 상업용 드론 플랫폼의 안전성, 신뢰성, 그리고 상업적 생존 가능성을 결정하는 핵심적인 아키텍처 결정이며, 본 보고서는 이러한 중대한 결정을 위한 데이터 기반의 명확한 가이드를 제공합니다.

상업용 드론 관제 시스템에서 통신 프로토콜의 선택은 단순한 기술 선호도의 문제가 아니라, 시스템의 안전 사례(Safety Case)를 구성하는 핵심 요소입니다. 따라서 프로토콜을 평가하기에 앞서, 상업용 드론의 통신 링크에 요구되는 비기능적 요구사항을 명확히 정의하는 것이 필수적입니다.

상업용 드론, 특히 비가시권(BVLOS) 비행을 수행하는 드론의 C2 통신은 하드 실시간(Hard Real-time) 제약 조건을 가집니다. 이는 평균 지연 시간이 낮은 것만으로는 부족하며, 지연 시간의 변동성, 즉 지터(Jitter) 또한 최소화되어야 함을 의미합니다. 제어 명령의 전달이 예측 불가능하게 지연될 경우, 이는 기체의 불안정한 거동으로 이어져 치명적인 사고를 유발할 수 있습니다.1

구체적인 수치로, BVLOS 원격 조종을 위한 종단 간(E2E) 지연 시간은 10-150ms 미만으로 요구되며 2, 충돌 회피나 피아식별(IFF) 시스템과 같은 안전 관련 기능에서는 50ms 미만의 왕복 시간(Round-Trip Time)이 일반적인 요구사항입니다.3 따라서 본 분석에서는 C2 링크의 목표 E2E 지연 시간을

50ms 미만으로 설정하고, 이를 핵심 평가 기준으로 삼습니다. 복잡한 핸드셰이크, 프로토콜 폴백, 과도한 처리 과정 등으로 인해 예측 불가능한 지연을 유발할 수 있는 모든 프로토콜은 안전에 직접적인 위협으로 간주됩니다.

드론 통신에서 ‘신뢰성’은 두 가지 상이한 관점에서 해석될 수 있으며, 이 둘을 구분하는 것이 매우 중요합니다.

첫째는 웹 중심의 ‘사용자 경험’ 관점에서의 신뢰성입니다. Socket.IO와 같은 라이브러리는 연결이 끊어졌을 때 자동으로 재연결을 시도하고, 그동안의 패킷을 버퍼링하여 연결이 복구되면 전송하는 기능을 제공합니다.4 이는 웹 채팅 애플리케이션에서는 훌륭한 기능입니다. 사용자는 일시적인 네트워크 불안정성을 인지하지 못하고 끊김 없는 경험을 할 수 있기 때문입니다.

그러나 둘째는 항공우주 및 로보틱스 분야에서 요구되는 ‘안전’ 관점에서의 신뢰성입니다. 이 관점에서 신뢰성이란 예측 가능하고 제한된 시간 내에 데이터가 전달되며, 실패 시 그 상태를 명확하게 인지하고 결정론적으로 대처할 수 있는 능력을 의미합니다.1 이러한 맥락에서 Socket.IO의 자동 폴백 기능(예: 웹소켓 연결 실패 시 HTTP 롱폴링으로 전환) 4은 신뢰성을 높이는 기능이 아니라 오히려 심각한 위험 요소입니다. 웹 채팅에서는 연결이 느려지는 것이 연결이 끊기는 것보다 낫지만, 드론 조종에서는 폴백으로 인해 지연 시간이 예측 불가능하게 3배 이상 급증하는 상황이 발생하면 이는 치명적인 시스템 오류로 간주되어야 합니다.

따라서 상업용 드론 시스템은 99.999% 수준의 통신 신뢰도를 목표로 해야 하며 2, 이는 단순히 메시지가 언젠가 전달되는 것을 넘어, 정해진 시간 내에 예측 가능하게 전달됨을 보장해야 합니다. 프로토콜은 패킷 손실을 감지할 수 있는 메커니즘(예: 시퀀스 번호)을 제공해야 하며 8, 애플리케이션(비행 컨트롤러)은 링크의 실제 상태를 명확히 인지하여 오래된(stale) 데이터에 기반한 위험한 조작을 피하고, 호버링이나 자동 복귀(RTL)와 같은 안전 모드로 전환할 수 있어야 합니다.

드론의 통신 링크는 제한된 자원입니다. 비효율적인 프로토콜은 더 많은 대역폭과 배터리를 소모하여 비행 시간을 단축시킵니다. C2 링크는 보통 0.25-1 Mbps 정도의 비교적 작은 대역폭을 사용하지만 2, 고주파의 텔레메트리 데이터가 지속적으로 전송되므로 페이로드 효율성이 매우 중요합니다.

MAVLink와 같은 프로토콜은 이러한 환경에 최적화되어, MAVLink 2의 경우 패킷당 14바이트에 불과한 매우 낮은 오버헤드를 가집니다.9 반면, 오버헤드가 큰 프로토콜은 초당 수십 회 전송되는 텔레메트리 데이터에서 누적되어 상당한 비효율을 초래할 수 있습니다. 따라서 프로토콜은 특히 고주파 데이터 전송에 있어 페이로드 대비 오버헤드가 최소화되어야 합니다. 또한, 저지연 C2 채널과 고대역폭 데이터 페이로드 채널을 분리하여 관리하는 전략도 고려될 수 있습니다.1

상업용 드론 시스템은 서비스 거부(DoS), 중간자 공격(Man-in-the-Middle), 하이재킹 등 다양한 사이버 위협에 노출되어 있습니다.10 따라서 통신 프로토콜은 강력한 보안 기능을 내장하거나 지원해야 합니다. 이는 다음을 포함합니다.

gRPC는 TLS를 기본으로 사용하며 11, MAVLink 2는 메시지 서명 기능을 옵션으로 제공하는 등 8 최신 프로토콜들은 이러한 요구사항을 충족시키기 위한 기능들을 포함하고 있습니다.

시스템은 단일 드론 운영에서 시작하여 향후 다수의 드론을 관리하는 플릿(fleet)으로 확장될 수 있습니다. 이를 위해 서버 인프라는 수평적 확장이 가능해야 하며 4, 선택된 프로토콜은 이러한 확장을 지원해야 합니다. 또한, 프로토콜은 특정 기술 스택에 종속되지 않고 다양한 클라이언트(예: 웹 기반 대시보드, 제3자 분석 도구)와 쉽게 통합될 수 있어야 합니다.12 Rust 생태계 내에서 해당 프로토콜을 지원하는 라이브러리가 성숙하고 활발하게 유지보수되고 있는지도 중요한 고려사항입니다.

이 섹션에서는 앞서 정의된 엄격한 운영 요구사항에 기반하여 Socket.IO를 평가합니다. Socket.IO를 일반적인 실시간 라이브러리가 아닌, 드론 C2 링크 후보로서 면밀히 분석합니다.

Socket.IO는 프로토콜이 아닌, 웹소켓을 추상화하는 라이브러리입니다.12 주요 특징으로는 이벤트 기반 API(.on, .emit) 15, 지수 백오프(exponential backoff)를 이용한 자동 재연결, 연결 끊김 감지를 위한 하트비트, 그리고 패킷 버퍼링 등이 있습니다.4

이러한 기능들은 웹 애플리케이션의 사용자 경험을 향상시키는 데 매우 유용합니다. 예를 들어, 이벤트 기반 모델은 on('new_command')와 같이 비동기적인 동작을 직관적으로 표현할 수 있게 해줍니다. 그러나 드론 제어의 관점에서 보면, 자동 재연결과 패킷 버퍼링 기능은 물리적 링크의 실제 상태를 애플리케이션 로직으로부터 숨기는 심각한 단점을 가집니다. 드론의 비행 제어 장치(FCU)는 안전한 비행을 위해 통신 링크의 상태를 명시적으로 인지하고 있어야 합니다. 만약 링크가 장시간 불안정하여 끊어진 상태를 Socket.IO의 추상화 계층이 숨기고 있다가, 연결이 복구되는 순간 버퍼에 쌓여 있던 오래된(stale) 명령들이 한꺼번에 실행된다면 예측 불가능한 기체 거동을 유발할 수 있습니다. 하트비트 메커니즘 16 자체는 긍정적인 기능이지만, 이 역시 자동 폴백 메커니즘과 결합될 때 그 동작의 예측 가능성을 신중하게 검토해야 합니다.

결론적으로, Socket.IO의 ‘신뢰성’ 기능들은 웹 환경에 최적화되어 있으며, 안전이 최우선인 드론 제어 시스템이 요구하는 명시적이고 결정론적인 링크 상태 관리와는 거리가 멉니다.

Socket.IO는 각 패킷에 자체적인 메타데이터와 프레이밍(framing)을 추가합니다. 이로 인해 원시 웹소켓에 비해 더 높은 메시지 오버헤드가 발생하며, 이는 대규모 환경에서 처리량과 지연 시간에 영향을 미칠 수 있습니다.5 일부 자료에서는 소규모 프로젝트에서는 성능 차이가 미미하다고 언급하지만, 대규모 또는 고성능 애플리케이션에서는 이 오버헤드가 중요한 고려사항이 된다고 지적합니다.13

예를 들어, 50Hz로 전송되는 기체 자세(attitude)와 같은 고주파 텔레메트리의 경우, 패킷당 추가되는 작은 오버헤드라도 누적되면 드론의 제한된 대역폭과 임베디드 프로세서의 CPU 사이클을 상당량 소모하게 됩니다. 또한, Socket.IO가 제공하는 편리한 확인응답(acknowledgement) 기능(socket.emit('event', data, callback)) 4은 메시지 전달을 확인하는 유용한 방법이지만, 이는 애플리케이션 계층에서 구현되며 통신에 추가적인 왕복 시간(RTT)을 발생시켜 지연 시간을 더욱 증가시키는 요인이 됩니다.

socketioxide는 최신 Rust 서버 구현체로, 활발하게 유지보수되고 있으며 Tower/Tokio 생태계(Axum, Hyper 등)와 완벽하게 통합됩니다.19 이 라이브러리는 네임스페이스, 룸, 바이너리 패킷 전송 등 Socket.IO의 핵심 기능들을 지원하며, Redis나 MongoDB와 같은 어댑터를 통해 수평적 확장도 가능합니다.20 공식 E2E 테스트 스위트로 검증되었다는 점도 신뢰도를 높입니다.21 Tower와의 통합은 TLS, 압축, 인증 등 표준 미들웨어를 쉽게 적용할 수 있다는 점에서 큰 장점입니다.21 바이너리 데이터 지원은 드론 텔레메트리 처리에 필수적입니다.21 소프트웨어 공학적 관점에서

socketioxide는 매우 견고하고 잘 설계된 라이브러리입니다.

rust-socketio는 Rust로 작성된 클라이언트 구현체입니다.23 변경 이력(changelog)을 보면 비동기에서 동기로, 다시 비동기로 전환하는 과정을 거쳤으며, 웹소켓 전송 및 바이너리 데이터 지원과 같은 핵심 기능들이 추가되었습니다.25 저장소는 최근까지 활동이 있었고, 다수의 이슈와 풀 리퀘스트가 존재하여 커뮤니티의 관심이 있음을 보여줍니다.26 Socket.IO 프로토콜 v5를 지원하며 24, Tokio 기반의 비동기 버전도 제공합니다.23

하지만 로드맵 문서 27가 다소 오래된 정보를 담고 있는 점(예: 현재는 별도 프로젝트인 socketioxide가 처리하는 “기본 서버”를 포함한 0.4.0 릴리즈 언급)과 비동기 구현을 “실험적(experimental)”이라고 명시한 점 23은 상업용 제품에 적용하기 전 신중한 검토가 필요함을 시사합니다. 안정성과 실제 환경에서의 성능에 대한 철저한 검증이 선행되어야 합니다.

결론적으로, Socket.IO를 Rust로 구현하기 위한 생태계는 존재하며 서버 측은 매우 견고하지만, 클라이언트 측은 상용 배포를 위해 추가적인 검증이 필요합니다. 그러나 더 근본적인 문제는 프로토콜 자체의 적합성입니다. Socket.IO는 채팅이나 라이브 대시보드와 같은 일반적인 웹 애플리케이션을 위해 설계된 범용 실시간 통신 프레임워크입니다.15 반면, 드론 제어는 하드 실시간, 예측 가능한 실패, 최소한의 오버헤드 등 고유한 요구사항을 가진 고도로 특화된 안전 필수(safety-critical) 영역입니다.2 Socket.IO를 드론 C2에 사용하는 것은 범용 도구를 특수 목적에 맞추려는 시도이며, 이는 필연적으로 타협을 낳습니다. Socket.IO가 제공하는 ‘편의성’ 기능들 12은 드론 제어의 핵심 가치인 ‘제어 가능성’과 ‘예측 가능성’을 희생시키는 대가로 얻어지므로, 근본적인 설계 철학의 불일치가 존재합니다.

Socket.IO의 타당성을 올바르게 평가하기 위해서는 고성능, 고신뢰성 및 임베디드 통신을 위해 설계된 다른 프로토콜들과의 비교가 필수적입니다.

이러한 비교 분석을 통해 중요한 아키텍처 패턴을 도출할 수 있습니다. MAVLink는 완벽한 페이로드 프로토콜이지만, 연결 관리나 TLS 보안과 같은 현대적인 네트워크 기능이 부족한 전송 프로토콜은 아닙니다.52 반면, 웹소켓과 gRPC는 훌륭한 전송 프로토콜이지만, “드론의 자세”가 무엇인지 이해하지 못하는 내용 불가지론적(content-agnostic) 프로토콜입니다.12 따라서 가장 정교한 아키텍처는 이 둘을 결합하는 것입니다. 웹소켓을 통해 MAVLink를 전송하는 것은 이미 알려진 구현 전략이며 59, MQTT를 웹소켓 위에서 실행하는 것도 마찬가지입니다.62 이는 ‘이것이냐 저것이냐’의 선택이 아니라, 현대적이고 안전한 전송 프로토콜 위에 고효율의 영역 특화 페이로드를 얹는 ‘둘 다’의 전략이 최선일 수 있음을 시사합니다.

이 섹션에서는 앞선 분석을 종합하여 각 프로토콜을 직접 비교함으로써 데이터 기반의 명확한 결정을 내릴 수 있도록 지원합니다.

아래 표는 섹션 2에서 정의한 핵심 운영 요구사항에 대해 각 프로토콜의 적합성을 평가한 것입니다. 이 매트릭스는 복잡한 다중 요소를 시각적으로 비교하여 최종 권장사항의 투명성과 정당성을 확보하는 데 목적이 있습니다.

표 5.1: 상업용 드론 제어를 위한 프로토콜 적합성 비교

평가 기준 Socket.IO 원시 웹소켓 gRPC MQTT MAVLink (페이로드)
C2 지연 시간 나쁨 (높은 오버헤드, 비결정적 폴백) 매우 우수 (최소 오버헤드) 매우 우수 (HTTP/2, 바이너리) 보통 (브로커 홉) N/A (전송 방식에 의존)
신뢰성 (안전성) 나쁨 (예측 불가능한 동작) 좋음 (명시적 제어) 좋음 (명시적 제어) 매우 우수 (QoS 보장) 매우 우수 (시퀀스 번호, CRC)
페이로드 효율성 나쁨 (프레이밍 오버헤드) 매우 우수 (최소 프레이밍) 매우 우수 (Protobufs) 매우 우수 (경량) 매우 우수 (바이너리 압축)
보안 보통 (외부 TLS 필요, 프로토콜 자체는 비보안) 좋음 (WSS 필요) 매우 우수 (기본적으로 TLS) 보통 (TLS 필요) 좋음 (v2에서 서명 지원)
개발 경험 매우 우수 (고수준 API) 보통 (저수준, 상용구 코드 증가) 좋음 (코드 생성, 강력한 계약) 좋음 (간단한 Pub/Sub API) 보통 (도구 필요)
Rust 생태계 좋음 (socketioxide, rust-socketio) 매우 우수 (tokio-tungstenite) 매우 우수 (tonic) 매우 우수 (rumqttc) 매우 우수 (rust-mavlink)
확장성 좋음 (어댑터 사용 가능) 좋음 (구현에 따라 다름) 매우 우수 (마이크로서비스용 설계) 매우 우수 (브로커 기반) N/A (전송 방식에 의존)

이 섹션에서는 이론을 넘어, 권장 프로토콜을 Rust 애플리케이션에서 어떻게 아키텍처링할 것인지 구체적으로 설명합니다.

드론 시스템은 C2, 텔레메트리, 비디오, 미션 파일 등 각기 다른 요구사항을 가진 다양한 유형의 데이터를 다룹니다. 단일 통신 채널은 최적이 아닐 수 있습니다. 따라서 다음과 같은 다중 스트림 아키텍처를 제안합니다.

분석 결과, Socket.IO는 성능 오버헤드, 비결정적 동작, 그리고 안전 필수 요구사항과의 근본적인 설계 불일치로 인해 상업용 드론 시스템의 C2 링크에 권장되지 않습니다.

가장 견고하고 신뢰할 수 있으며 미래 지향적인 아키텍처는 MAVLink 프로토콜을 안전한 최신 전송 계층 내에 캡슐화하는 것입니다.

만약 프로젝트의 목표가 MAVLink 생태계를 완전히 피하는 것(예: 완전한 독점 프로토콜 생성)이라면, 순수 gRPC 구현이 가장 강력한 선택입니다. 이 경우, 팀은 모든 명령과 텔레메트리 메시지를 .proto 파일에 정의해야 합니다. 이는 gRPC의 고성능, 양방향 스트리밍, 강력한 계약을 활용하여 견고한 맞춤형 솔루션을 제공합니다. 기술적으로는 타당하지만, MAVLink 메시지 세트에 수십 년간 축적된 노력을 재정의해야 하는 상당한 노력이 필요합니다.

통신 프로토콜의 결정은 상업용 드론 시스템의 안전과 신뢰성에 직접적인 영향을 미치는 근본적인 아키텍처 기둥입니다. MAVLink의 영역 특화적 효율성을 웹소켓이나 gRPC의 안전한 최신 전송 능력 위에 계층화함으로써, 시스템은 상업적 배포에 요구되는 최고 수준의 성능과 무결성을 달성할 수 있습니다. 이 전략적 선택은 양쪽 세계의 장점을 모두 활용하여 위험을 완화하고, 견고하며 확장 가능한 안전한 통신 백본을 보장합니다.

  1. Enabling Reliable UAV Control by Utilizing Multiple Protocols and Paths for Transmitting Duplicated Control Packets, accessed July 28, 2025, https://pmc.ncbi.nlm.nih.gov/articles/PMC8126231/
  2. Ultra-Reliable Low-Latency Communication for Aerial Vehicles via Multi-Connectivity - arXiv, accessed July 28, 2025, https://arxiv.org/pdf/2205.06046
  3. Low-Latency Communication Protocols for Drone IFF: Ensuring Swift and Secure Identification - Decent Cybersecurity, accessed July 28, 2025, https://decentcybersecurity.eu/low-latency-communication-protocols-for-drone-iff-ensuring-swift-and-secure-identification/
  4. What is Socket.IO? How it works, use cases & best practices - Ably, accessed July 28, 2025, https://ably.com/topic/socketio
  5. Introduction Socket.IO, accessed July 28, 2025, https://socket.io/docs/v4/
  6. Introduction - Socket.IO, accessed July 28, 2025, https://socket.io/docs/v3/
  7. Socket.IO vs. WebSockets: Comparing Real-Time Frameworks - PubNub, accessed July 28, 2025, https://www.pubnub.com/guides/socket-io/
  8. MAVLink - Wikipedia, accessed July 28, 2025, https://en.wikipedia.org/wiki/MAVLink
  9. MAVLink Developer Guide, accessed July 28, 2025, https://mavlink.io/en/
  10. Drone Secure Communication Protocol for Future Sensitive Applications in Military Zone - PMC - PubMed Central, accessed July 28, 2025, https://pmc.ncbi.nlm.nih.gov/articles/PMC8000982/
  11. How robots talk: building distributed robots with gRPC and WebRTC, accessed July 28, 2025, https://grpc.io/blog/robotics/
  12. WebSocket vs Socket.IO: Performance & Use Case Guide - Ably, accessed July 28, 2025, https://ably.com/topic/socketio-vs-websocket
  13. Websocket VS socket.io which one should be preferred and why : r/node - Reddit, accessed July 28, 2025, https://www.reddit.com/r/node/comments/1lkzxzb/websocket_vs_socketio_which_one_should_be/
  14. Socket.IO vs WebSocket: Comprehensive Comparison and Implementation Guide, accessed July 28, 2025, https://www.videosdk.live/developer-hub/websocket/socketio-vs-websocket
  15. Socket.IO Tutorial CS4530, Spring 2025 - GitHub Pages, accessed July 28, 2025, https://neu-se.github.io/CS4530-Spring-2025/tutorials/week5-socketio-basics
  16. Introduction - Socket.IO, accessed July 28, 2025, https://socket.io/docs/v2/
  17. Is Socket.io still the go-to for websockets or is there something better? : r/node - Reddit, accessed July 28, 2025, https://www.reddit.com/r/node/comments/l2goiw/is_socketio_still_the_goto_for_websockets_or_is/
  18. Socket.io benchmarking - how many messages can you send per second? - Hacker News, accessed July 28, 2025, https://news.ycombinator.com/item?id=3329967
  19. Socketioxide - Here to define the Realtime. (0.6 release) - Rust Users Forum, accessed July 28, 2025, https://users.rust-lang.org/t/socketioxide-here-to-define-the-realtime-0-6-release/101372
  20. Socketioxide - SocketIO server powered by Rust! - DEV Community, accessed July 28, 2025, https://dev.to/rosemediahouse/socketio-in-rust-360a
  21. Totodore/socketioxide: A socket.io server implementation in … - GitHub, accessed July 28, 2025, https://github.com/Totodore/socketioxide
  22. socketioxide - crates.io: Rust Package Registry, accessed July 28, 2025, https://crates.io/crates/socketioxide
  23. rust_socketio - crates.io: Rust Package Registry, accessed July 28, 2025, https://crates.io/crates/rust_socketio
  24. 1c3t3a/rust-socketio: An implementation of a socket.io client written in the Rust programming language. - GitHub, accessed July 28, 2025, https://github.com/1c3t3a/rust-socketio
  25. rust-socketio/CHANGELOG.md at main - GitHub, accessed July 28, 2025, https://github.com/1c3t3a/rust-socketio/blob/main/CHANGELOG.md
  26. Build and code style / Workflow runs / 1c3t3a/rust-socketio - GitHub, accessed July 28, 2025, https://github.com/1c3t3a/rust-socketio/actions/workflows/build.yml
  27. Roadmap.md - 1c3t3a/rust-socketio - GitHub, accessed July 28, 2025, https://github.com/1c3t3a/rust-socketio/blob/main/Roadmap.md
  28. Socket io .NET (How It Works For Developers) - IronPDF, accessed July 28, 2025, https://ironpdf.com/blog/net-help/socket-io-net/
  29. Reliable Communication Systems for Long-Range Drone Operations - Xray, accessed July 28, 2025, https://xray.greyb.com/drones/communication-protocols-long-range-drone-networks
  30. WebSocket vs Ws vs Socket.io ? : r/node - Reddit, accessed July 28, 2025, https://www.reddit.com/r/node/comments/18vx421/websocket_vs_ws_vs_socketio/
  31. Ask Rustaceans: Which web socket library to use? : r/rust - Reddit, accessed July 28, 2025, https://www.reddit.com/r/rust/comments/6v44nn/ask_rustaceans_which_web_socket_library_to_use/
  32. tokio_tungstenite - Rust - Docs.rs, accessed July 28, 2025, https://docs.rs/tokio-tungstenite/latest/tokio_tungstenite/
  33. Future-based Tungstenite for Tokio. Lightweight stream-based WebSocket implementation - GitHub, accessed July 28, 2025, https://github.com/snapview/tokio-tungstenite
  34. Use tokio-tungstenite with rustls instead of native_tls for secure websockets - help, accessed July 28, 2025, https://users.rust-lang.org/t/use-tokio-tungstenite-with-rustls-instead-of-native-tls-for-secure-websockets/90130
  35. Websocket starter in Rust with client and server example - DEV Community, accessed July 28, 2025, https://dev.to/campbellgoe/websocket-starter-in-rust-with-client-and-server-example-4ahj
  36. HTTP, WebSocket, gRPC or WebRTC: Which Communication Protocol is Best For Your App? - GetStream.io, accessed July 28, 2025, https://getstream.io/blog/communication-protocols/
  37. How to Build gRPC APIs with Rust - Kong Inc., accessed July 28, 2025, https://konghq.com/blog/engineering/building-grpc-apis-with-rust
  38. REST vs gRPC vs GraphQL vs WebSockets vs SOAP: A Practical Guide for Engineers, accessed July 28, 2025, https://dev.to/rajkundalia/rest-vs-grpc-vs-graphql-vs-websockets-vs-soap-a-practical-guide-for-engineers-37d9
  39. WebSocket vs gRPC: Detailed Comparison and Implementation Guide - VideoSDK, accessed July 28, 2025, https://www.videosdk.live/developer-hub/websocket/websocket-vs-grpc
  40. Rust gRPC - Using Tonic :: Adhita Selvaraj - Be Kind, accessed July 28, 2025, https://www.swiftdiaries.com/rust/tonic/
  41. gRPC vs. WebSocket: What is the Difference - Apidog, accessed July 28, 2025, https://apidog.com/articles/grpc-vs-websocket-key-differences/
  42. The Duel of Data: gRPC vs WebSockets - Apidog, accessed July 28, 2025, https://apidog.com/blog/grpc-vs-websockets/
  43. gRPC vs. WebSocket: Key differences and which to use - Ably, accessed July 28, 2025, https://ably.com/topic/grpc-vs-websocket
  44. hyperium/tonic: A native gRPC client & server implementation with async/await support. - GitHub, accessed July 28, 2025, https://github.com/hyperium/tonic
  45. Tonic makes gRPC in Rust stupidly simple - YouTube, accessed July 28, 2025, https://www.youtube.com/watch?v=kerKXChDmsE
  46. WebSocket vs MQTT: Performance Comparison for Enterprises - Lightyear.ai, accessed July 28, 2025, https://lightyear.ai/tips/websocket-versus-mqtt-performance
  47. MQTT vs Websocket Svix Resources, accessed July 28, 2025, https://www.svix.com/resources/faq/mqtt-vs-websocket/
  48. MQTT vs WebSocket - GeeksforGeeks, accessed July 28, 2025, https://www.geeksforgeeks.org/computer-networks/mqtt-vs-websocket/
  49. rumqtt/rumqttc/README.md at main - GitHub, accessed July 28, 2025, https://github.com/bytebeamio/rumqtt/blob/main/rumqttc/README.md
  50. rumqttc - Rust - Docs.rs, accessed July 28, 2025, https://docs.rs/rumqttc/latest/rumqttc/
  51. Getting started - RUMQTT - Bytebeam, accessed July 28, 2025, https://rumqtt.bytebeam.io/docs/rumqttc/Introduction/
  52. MAVLink - Clover, accessed July 28, 2025, https://clover.coex.tech/en/mavlink.html
  53. MAVLink Basics - Dev documentation - ArduPilot, accessed July 28, 2025, https://ardupilot.org/dev/docs/mavlink-basics.html
  54. Protocol Overview - MAVLink Guide, accessed July 28, 2025, https://mavlink.io/en/about/overview.html
  55. Mavlink Communications - Quanser, accessed July 28, 2025, https://docs.quanser.com/quarc/documentation/quarc_communications_mavlink.html
  56. mavlink - crates.io: Rust Package Registry, accessed July 28, 2025, https://crates.io/crates/mavlink/0.10.9
  57. mavlink - Rust, accessed July 28, 2025, https://mavlink.github.io/rust-mavlink/mavlink/
  58. mavlink - crates.io: Rust Package Registry, accessed July 28, 2025, https://crates.io/crates/mavlink/dependencies
  59. MAVLink–WebSocket proxy (proof-of-concept) - GitHub, accessed July 28, 2025, https://github.com/CopterExpress/mavlink-websocket
  60. module: Websocket by jheising / Pull Request #1442 / ArduPilot/MAVProxy - GitHub, accessed July 28, 2025, https://github.com/ArduPilot/MAVProxy/pull/1442
  61. How do I use MAVLink Endpoints to get gamepad data? - Page 2 - Cockpit, accessed July 28, 2025, https://discuss.bluerobotics.com/t/how-do-i-use-mavlink-endpoints-to-get-gamepad-data/16671?page=2
  62. MQTT over WebSockets - MQTT Essentials Special - HiveMQ, accessed July 28, 2025, https://www.hivemq.com/blog/mqtt-essentials-special-mqtt-over-websockets/