기사가 원본 기사인 경우 재인쇄 시 원본 기사의 출처를 명시해 주시기
바랍니다 .
국산 Kylin 시스템 및 Tongxin UOS 시스템 개발
마지막 기사: " Tongxin UOS 시스템 개발 노트(7): linuxdeployqt를 사용하여 Tongxin UOS 시스템에서 qt 프로그램 출시 "
다음 기사: 계속 지켜봐 주십시오...
머리말
Tongxin uos는 개발에 mqtt를 사용하며 mqtt를 다시 컴파일해야 합니다.이 기사에서는 Tongxin uos20에서 mqtt 소스 코드 컴파일 및 환경 구성에 대해 설명합니다.
알아채다
여기에서 다운로드한 mqtt 버전은 다른 글과 다른데 여기서는 QMQTT::CLIENT를 사용하여 작동합니다.여기서 작성자는 Qt에 두 가지 버전이 있음을 알고 있습니다. 다른 클래스 및 방법에 따라 필요에 따라 선택하십시오)
관련 블로그
" Mqtt Development Notes: Mqtt 서버 구성 "
" Qt 개발 기술: mqtt 소개, QtMqtt 컴파일 및 개발 환경 구축 "
" Mqtt Development Notes: Windows에서 C++ ActiveMQ 클라이언트 소개, 컴파일 및 사용 "
MQTT 프로토콜
소개
MQTT(Message Queuing Telemetry Transport, Message Queuing Telemetry Transport Protocol)는 1999년 IBM에서 개발한 TCP/IP 프로토콜을 기반으로 하는 게시/구독(게시/구독) 모델을 기반으로 하는 "경량" 통신 프로토콜입니다. 출시된. MQTT의 가장 큰 장점은 매우 적은 코드와 제한된 대역폭으로 연결된 원격 장치에 대한 안정적인 실시간 메시지 서비스를 제공할 수 있다는 것입니다. 낮은 오버헤드, 낮은 대역폭의 인스턴트 메시징 프로토콜로서 사물 인터넷, 소형 장치 및 모바일 애플리케이션의 광범위한 애플리케이션을 보유하고 있습니다.
설계 원칙
- 불필요한 기능을 추가하지 않고 능률화되었습니다.
- 센서 간 메시지 전송을 용이하게 하는 발행/구독(Pub/Sub) 모드
- 사용자가 주제를 동적으로 생성할 수 있도록 하여 운영 및 유지 비용이 들지 않습니다.
- 전송 효율을 높이기 위해 전송량을 최소화합니다.
- 낮은 대역폭, 긴 대기 시간, 불안정한 네트워크와 같은 요소를 고려하십시오.
- 지속적인 세션 제어를 지원합니다.
- 클라이언트 컴퓨팅 성능이 낮을 수 있음을 이해하십시오.
- 서비스 품질 관리 제공
- 데이터가 불가지론적이라고 가정하면 전송된 데이터의 유형과 형식은 유연성을 유지하는 데 필요하지 않습니다.
특징
1) 게시/구독 메시지 모드를 사용하여 일대다 메시지 게시 및 분리 애플리케이션 제공
이것은 XMPP와 매우 유사하지만 XMPP는 XML 형식의 텍스트를 사용하여 데이터를 전송하기 때문에 MQTT의 정보 중복성은 XMPP보다 훨씬 작습니다.
2) 페이로드 콘텐츠 마스킹을 위한 메시지 전송
3) TCP/IP를 이용한 네트워크 연결 제공
주류 MQTT는 데이터 푸시를 위한 TCP 연결을 기반으로 하지만 MQTT-SN이라는 UDP 기반 버전도 있습니다. 이 두 가지 버전은 서로 다른 연결 방법을 기반으로 하기 때문에 장단점이 당연히 다릅니다.
4) 메시지 게시 서비스 품질에는 세 가지 유형이 있습니다.
- "최대 한 번" 메시지 게시는 기본 TCP/IP 네트워크에 전적으로 의존합니다. 메시지 손실 또는 중복이 발생할 수 있습니다. 이 수준은 환경 센서 데이터와 같은 상황에서 사용할 수 있습니다. 가까운 장래에 두 번째 전송이 있기 때문에 읽기 레코드가 손실되더라도 상관 없습니다. 이 방법은 주로 일반 APP 푸시용으로, 메시지 푸시 시 스마트 기기가 인터넷에 연결되어 있지 않은 경우 과거에 푸시가 수신되지 않았으며, 인터넷 연결 시 수신되지 않습니다. 다시.
- "적어도 한 번"은 메시지가 도착하도록 하지만 메시지 중복이 발생할 수 있습니다.
- "한 번만"은 메시지가 한 번만 도착하도록 합니다. 이 수준은 요구 사항이 엄격한 일부 청구 시스템에서 사용할 수 있습니다. 청구 시스템에서 메시지가 중복되거나 누락되면 잘못된 결과가 발생할 수 있습니다. 이 최고 품질의 메시지 게시 서비스는 인스턴트 메시징 APP 푸시에도 사용되어 사용자가 한 번만 수신하도록 할 수 있습니다.
5) 작은 전송, 낮은 오버헤드
(고정 길이 헤더는 2바이트), 프로토콜 교환을 최소화하여 네트워크 트래픽을 줄입니다. "사물 인터넷 분야에서 센서와 서버 간의 통신 및 정보 수집"에 매우 적합합니다. 임베디드 장치의 컴퓨팅 성능과 대역폭은 상대적으로 약하므로 이 프로토콜을 사용하여 메시지를 전송하는 것이 완벽합니다.
6) 클라이언트의 비정상적인 중단 메커니즘.
- 마지막 유언장: 마지막 유언장을 보낸 장치의 연결이 끊어졌음을 동일한 주제 아래의 다른 장치에 알리는 데 사용되는 마지막 유언장 메커니즘입니다.
- 유언: Last Will과 기능이 유사한 유언 메커니즘.
게시/구독자 패턴
MQTT는 클라이언트-서버 기반 메시지 발행/구독 전송 프로토콜입니다. MQTT 프로토콜은 가볍고 간단하며 개방적이며 구현하기 쉽습니다. 이러한 특성으로 인해 널리 적용할 수 있습니다. 많은 경우 M2M(Machine-to-Machine) 통신 및 사물 인터넷(IoT)과 같은 제한된 환경을 포함합니다. 그것은 위성 링크를 통해 통신하는 센서, 때때로 전화를 거는 의료 기기, 스마트 홈 및 일부 소형 장치에 광범위하게 사용됩니다.
그림에서 MQTT에는 세 가지 역할이 있습니다.
- Broker agent : 많은 사람들이 미들웨어로 이해하고 있습니다. 물론 그렇게 볼 수도 있습니다. 그는 미들웨어입니다. 정보를 가공하여 해당 가입자에게 보내기 위해 사용합니다.
- 게시자 : 에이전트에 정보를 게시하는 데 사용됩니다. 참고: 발행자는 구독자가 될 수도 있습니다.
- Subscriber : 정보를 받는 클라이언트입니다.
MQTT 서버
MQTT 서버는 "메시지 브로커"(브로커)라고 하며 애플리케이션 또는 장치일 수 있습니다. 메시지 게시자와 구독자 사이에 있으며 다음을 수행할 수 있습니다.
- 고객의 네트워크 연결을 수락합니다.
- 고객이 공개한 애플리케이션 정보를 수락합니다.
- 클라이언트의 구독 및 구독 취소 요청을 처리합니다.
- 가입한 클라이언트에 애플리케이션 메시지를 전달합니다.
MQTT 프로토콜의 메서드
일부 메서드(작업이라고도 함)는 특정 리소스에 대한 작업을 나타내기 위해 MQTT 프로토콜에 정의되어 있습니다. 이 리소스는 서버 구현에 따라 기존 데이터 또는 동적으로 생성된 데이터를 나타낼 수 있습니다. 일반적으로 리소스는 서버의 파일 또는 출력을 나타냅니다. 주요 방법은 다음과 같습니다.
- Connect : 서버와의 연결을 기다리는 중
- 연결 끊기 : MQTT 클라이언트가 작업을 완료할 때까지 기다린 후 서버에서 TCP/IP 세션 연결을 끊습니다.
- 구독 : 구독이 완료될 때까지 기다립니다.
- UnSubscribe : 서버가 클라이언트의 하나의 라이브 다중 및 주제 구독을 취소하기를 기다립니다.
- Publish : MQTT 클라이언트는 메시지 요청을 전송하고 전송 후 애플리케이션 스레드로 리턴합니다.
Tongxin UOS 시스템 버전
시스템 버전:
Qt는 Mqtt를 컴파일합니다(uos 시스템).
Qt는 버전 5와 10에서 mqtt를 지원하기 시작했지만 설치 패키지에 통합되어 있지 않으므로 직접 다운로드하여 컴파일해야 합니다. (Qt5.9.3을 사용하여 mqtt를 실행할 수도 있습니다.)
Qt에서 제공하는 qtmqtt 라이브러리는 큐 모드(point-to-point)를 지원하지 않으며 구독/게시자 모드만 지원합니다.
1단계: mqtt를 다운로드하고 대상 시스템에 복사 및 압축 해제(이 단계는 폐지됨)
다운로드 주소: https://codereview.qt-project.org/admin/repos/qt%2Fqtmqtt
, 일반 CSDN 주소: https://download.csdn.net/download/qq21497936/11211403
지침:
git clone "https://codereview.qt-project.org/qt/qtmqtt"
(PS: 현재 시간은 2023년 6월 16일입니다. 이때 다운로드한 qtmqtt는 CMakeList를 사용하여 버전을 구성하고 컴파일하도록 업데이트되었습니다. 블로거의 다른 블로거의 qtmqtt 버전은 .pro 버전입니다)
여기에서 " Into the Pit 1 "을 확인하십시오. 우리는 qt5 버전이므로 git 다운로드는 쓸모가 없습니다. 이제 qt 소스 코드 다운로드로 전환하여 mqtt 모듈의 해당 버전을 다운로드하십시오.
2단계: mqtt 모듈 소스 코드를 다운로드하는 qt 소스 코드, 대상 시스템에 압축 해제
여기에서 qtmqtt의 해당 버전을 다운로드하고 싶기 때문에 버전을 선택해야 합니다.
좋지 않습니다. github에서 버전을 찾았습니다: https://github.com/emqx/qmqtt
이것은 pro와 cmake를 모두 지원합니다. 다운로드하고 압축을 풉니다.
3단계: QtQCreator를 사용하여 프로 프로젝트 컴파일 열기
릴리스에 맞게 조정된 이 오류는 블로그의 다른 버전에서 여기에서 컴파일된 오류와 일치하므로 새 것을 다운로드하고 잘못 시도했지만 동일한 것으로 판명되었습니다.
삭제 후 mqtt 라이브러리를 별도로 빌드합니다. 동일합니다.
조사 결과 Qt5Mqtt 파일이 생성되지 않는 것이 문제인 것으로 밝혀졌습니다. .../qtmqtt/src/mqtt/.pch 경로에 Qt5Mqtt 파일을 수동으로 생성하면 해결됩니다.
그런 다음 쉽게 성공합니다.
그런 다음 모듈화를 위해 디버그도 컴파일됩니다.
qt에 mqtt 모듈 배포
여기에는 세 가지 방법이 있는데, 첫 번째는 소스 코드를 프로젝트에 직접 대체하는 방법, 두 번째는 모듈 형태로 qt 설치 디렉토리에 직접 배포하는 방법, 세 번째는 라이브러리 및 헤더 파일을 직접 추가하는 방법입니다. 첫 번째 방법은 Qt 설치 라이브러리의 설치 디렉토리에 추가하고, 두 번째 방법은 " Qt Development Technology: Introduction to mqtt, QtMqtt Compilation and Development Environment Construction "에서 확인하실 수 있습니다.
이전에 라이브러리로 컴파일할 수 있으므로 코드를 소스 코드에 직접 통합할 수 있습니다.
1단계: 새 mqttClientDemo 프로젝트 생성
2단계: 소스 코드에서 mqtt 모듈을 추출하고 통합합니다.
qtmqtt 소스 코드 중 하나를 추출하여 새 프로젝트의 모듈에 일반 코드 모듈로 추가하고 qmqtt.pri 파일을 가져옵니다.
3단계: 컴파일 및 오류 보고, 네트워크 모듈 추가
QHostAddress를 찾을 수 없고 네트워크 모듈 모듈이 누락되었으며 네트워크 모듈이 추가되었다는 컴파일 오류가 보고되었습니다.
QT += network
추출된 소스 코드의 .pri에 다음을 추가합니다.
그런 다음 컴파일하십시오.
4단계: 컴파일 및 오류 보고, 함수 정의를 찾을 수 없음
" Entering the Pit 2 "를 확인하십시오. 이전에는 PRIVATE_HEADERS를 사용하여 라이브러리였기 때문에 이제 소스 코드 통합이며 아래와 같이 HEADERS로 대체됩니다.
헤더 파일을 내보내십시오.
컴파일을 계속하십시오.
5단계: 컴파일 및 전달
소스 코드는 컴파일에 통합되고 전달되므로 이후에 시스템 또는 버전을 변경하기 위해 mqtt 모듈을 추가할 때 다시 컴파일할 필요가 없으므로 작성자에게 더 적합합니다.
6단계: 배포 모듈 최적화
새 mqttClientManager 관리 모듈을 만들고(빈 관리 클래스를 사용하여 먼저 자리를 차지함) 이 모듈을 사용하여 mqtt 소스 코드를 포함합니다.
모듈식 배포
프로젝트 템플릿
구덩이 속으로
항목 1: 최신 버전 다운로드는 qt5를 지원하지 않지만 qt6은 지원합니다.
질문
최신 버전의 Git은 qt5를 지원하지 않지만 qt6은 지원합니다.
이유
Q6은 컴파일을 위해 cmake로 변경, qt5는 qmake, 작성자는 qt5
해결하다
이 버전의 mqtt는 포기하고 qt5를 지원하는 마지막 mqtt 버전을 찾습니다.
항목 2: mqtt 헤더 파일을 찾을 수 없습니다.
질문
소스 코드가 포함되어 있지만 찾을 수 없습니다.
이유
개인 헤더 파일 매크로를 헤더 파일 매크로로 변경하려면
해결하다
구덩이 3: 이전 버전은 qt5.12.8 컴파일에 통합하려고 시도했지만 실패했습니다.
문제와 원인
해결하다
해결할 필요가 없으며 문제가 있음을 나타냅니다. 해당 버전을 다운로드하십시오.
마지막 기사: " Tongxin UOS 시스템 개발 노트(7): linuxdeployqt를 사용하여 Tongxin UOS 시스템에서 qt 프로그램 출시 "
다음 기사: 계속 지켜봐 주십시오...
기사가 원본 기사인 경우 재인쇄 시 원본 기사의 출처를 명시해 주시기
바랍니다 .