최근 업데이트:2017-08-10
출처: 인터넷
작성자: 사용자
키워드:
클라우드 컴퓨팅
MQTT
PMQTT 프로토콜
PAHO 라이브러리
토끼-MQTT + PMQTT 프로토콜 + paho 라이브러리 (ubuntu16.04).
단계
1 설치 Rabiit mq Mqtt-서버 다운로드 그냥 뎁 가방을 사용 합니다. 또 다른 필요 sudo-설치 얻을 Erlang
2 시작 Sudo/etc/init.d/rabbitmq-server 다시 시작
3 3.1 mqtt 프로토콜 지원 Rabbitmq-플러그인 사용 Rabbitmq_mqtt
4 오픈 시작 웹 관리 Rabbitmq-플러그인 사용 Rabbitmq_management
5 다운로드 컴파일 PAHO CPP
C에서 패키지 6 실행 Mqtt 술집/하위 예제에서는 + + Hapowapper, Protoc buf와 결합
컴파일: g + + main.cpp-o-lpaho-mqtt3c-std = c + + 11 코드
C + +-hapowapper.h 낮은 아이누어 C 호출 라이브러리 캡슐화
Main.cpp
#include #include #include Std::cout;를 사용 하 여 "hapoWapper.h" Std::endl;를 사용 하 여 Std::shared_ptr;를 사용 하 여 #define 58daf13e258951000ab2b38f"주소"127.0.0.1:1883"#define CLIENTID" #define TOPIC1 "바로 사람" #define TOPIC2 말 남자 "Const char * 토큰 =" ybljnekvdovypfjo7ejztfvoya94xv4gbuvb9u85kjy = "; void fdelivered (void * 컨텍스트, Mqttclient_deliverytoken dt) {printf ("토큰 값 %d 배달 confirmed\n 메시지", D T); int Fmsgarrvd (void * 컨텍스트, char * topicname, int topiclen, mqttclient_message * 메시지) {int 나 char * payloadptr; 인화 TF ("메시지 arrived\n"); printf ("topic:%s\n", topicname); printf ("메시지:"); 경우 (! strcmp (Topicname, topic1)) {printf ("있어 토큰 크기 = %d,%s\n", 메시지-payloadlen, (char *) 메시지-> 페이로드) ; Payloadptr = (char *) 메시지 페이로드;-> 대 한 (나 = 0 Ipayloadlen; i + +) {Putchar (* payloadptr + +);} putchar (' \ n '); Mqttclient_freemessage (& 메시지); Mqttclient_free (topicname); 1; 반환 } Fconnlost 무효 (void * 컨텍스트, char * 원인) {printf ("\nconnec기 lost\n "); printf ("Cause:%s\n", 원인); 주요 int (int argc, char * argv[]) {mqttclient_connectoptions conn_opts = Mqttclient_connectoptions_initializer; conn_op Ts.keepaliveinterval = 20; Conn_opts.cleansession = 1; Clientparams 성명서 (주소, clientid, conn_opts); Cbgroups CBS (FCONNLOST, FDELIVERED, FMSGARRVD); Pahowapper WAP (성명서); Wap.connect (CBS); printf ("Subcribe topic:%s%s\n", topic1, topic2); Wap.subscribe (topic2, 1); Wap.subscribe (topic1, 1); printf ("topic:%s\n와 게시", TOPIC2); 자동 단어 = "Coooooooool"; Wap.publish (Topic2, 단어, strlen (단어), 1); 숯불 채널; 할 {ch = getchar (), 동안 (ch! 'q' = & & 채널! = 'Q'); 0; 반환 }
HapoWapper.h
#ifndef hapo_wapper_h #define HAPO_WAPPER_H #include "MQTTClient.h" #include #include 형식 void (* connlost) (void *, 차 r *); typedef void (* 배달) (void * 컨텍스트, Mqttclient_deliverytoken dt); typedef INT (* MSGARRVD) (void * 컨텍스트, char * topicname, int topiclen, mqttclient_message * 메시지); Clientparams 클래스 {공공: clientparams () {}; ~ clientparams () {}; const char * _server_uri; const char * _client_id; Mqttclient_connectoptions _conn_opts; Clientparams (const char * a, const char * B, const mqttclient_connectoptions & O): (a), _client_id (b), _conn_ _server_uri (O) {}; oPTs Clientparams & 연산자 (const CLIENTPARAMS 및 CP) = {경우 (& CP이 = =) 반환 *이; _server_uri = Cp._server_uri ; _client_id = cp._client_id; _conn_opts = cp._conn_opts; 반환 *; }; }; 클래스 Cbgroups {공공: connlost CONNECT_CB 전달 된 DELIVERED_CB; MSGARRVD MSGARRVD_CB (cbgroups C, connlost D, MSGARRVD m): CONNECT_CB (c), DELIVERED_CB (d), MSGARRVD_CB (m) {}; }; Pahowapper 클래스 {공개:Pahowapper () {}; ~ pahowapper () {}; Pahowapper (const CLIENTPARAMS & 성명서) {_paras = 성명서; printf ("%s의 클라이언트 access%s\n", _paras._client_id, _paras._ser Ver_uri); Mqttclient_create (및 _client, _paras._server_uri, _paras._client_id, Mqttclient_persistence_none, NULL); }; int 연결 (const cbgroups & CBS) {int rc; Mqttclient_setcallbacks (_client, CBS.DELIVERED_CB, CBS.MSGARRVD_CB, CBS.CONNECT_CB, NULL); 경우 (rc = Mqttclient_connect (_client, 및 (_paras._conn_opts))! = mqttclient_success) {printf ("연결 하지 못했습니다, Retu RN code%d\n, RC); 출구 (-1); RC; 반환 }; 연결 끊기 (void) {Mqttclient_disconnect (_client, 10000); Mqttclient_destroy (및 _client); }; 게시 취소 (const char * 주제, const void * 페이로드, int len, int qos_lvl) {Mqttclient_message pubmsg = Mqttclient_messa Ge_initializer; Mqttclient_deliverytoken 토큰; Pubmsg.payload = (void *) 페이로드; Pubmsg.payloadlen = 렌; Pubmsg.qos = QOS_LVL; pubmsg.retained = 0; Mqttclient_publishmessage (_client, 주제, 및 pubmsg, & 토큰); printf ("게시 of%s\n에 대 한 대기" ""ClientID:%s\n 사용 하 여 클라이언트에 대 한 항목 %s "에 게, (char *) 페이로드, 주제, _paras._clie NT_ID); }; 구독을 무효화 (const char * 주제, int qos_lvl) {mqttclient_subscribe (_client, 주제, QOS_LVL); 개인: mqttclient _client; Clientparams _paras; }; #endif