中文说明
ไคลเอนต์ MQTT ข้ามแพลตฟอร์มประสิทธิภาพสูง มีเสถียรภาพสูง
ไคลเอนต์ MQTT ข้ามแพลตฟอร์มประสิทธิภาพสูง ความเสถียรสูง ได้รับการพัฒนาโดยใช้ซ็อกเก็ต API สามารถใช้บนอุปกรณ์ฝังตัว (FreeRTOS/LiteOS/RT-Thread/TencentOS Tiny), Linux, Windows, Mac และมี กระชับมาก อินเทอร์เฟซ API ตระหนักถึงคุณภาพของบริการของ QOS2 โดยใช้ทรัพยากรน้อยมาก และเชื่อมต่อไลบรารีการเข้ารหัส mbedtls ได้อย่างราบรื่น
ความเสถียรสูงอย่างยิ่ง : ไม่ว่าจะเป็นการ ดร็อปและเชื่อมต่อใหม่ , การสูญหายของแพ็กเก็ตและการส่งสัญญาณซ้ำ , เป็นไปตามมาตรฐานโปรโตคอล MQTT อย่างเคร่งครัด , นอกเหนือจากการทดสอบ ปริมาณข้อมูลขนาดใหญ่ ยังมีความเสถียรมากไม่ว่าจะรับหรือส่ง, และการทดสอบ ความถี่สูง ก็มีเสถียรภาพมากเช่นกัน
น้ำหนักเบา : โค้ดโปรเจ็กต์ทั้งหมดนั้นง่ายมาก หากไม่มี mbedtl จะใช้ทรัพยากรน้อยมาก ผู้เขียนใช้โมดูล esp8266 เพื่อสื่อสารกับคลาวด์ รหัสโครงการทั้งหมดใช้ RAM น้อยกว่า 15k
รองรับการส่งข้อมูลที่เข้ารหัส mbedtls ทำให้การส่งข้อมูลเครือข่ายปลอดภัยยิ่งขึ้น และเลเยอร์อินเทอร์เฟซไม่ต้องการให้ผู้ใช้ดูแล ไม่ว่าจะถูกเข้ารหัสหรือไม่ก็ตาม mqttclient ได้ รับการแก้ไข สำหรับอินเทอร์เฟซ API ที่ผู้ใช้จัดเตรียมไว้ ซึ่งเข้ากันได้ดีกับชุด A ของรหัสในนามของเลเยอร์แอปพลิเคชันสามารถส่งโดยมีหรือไม่มีการเข้ารหัสก็ได้
รองรับไคลเอนต์หลายตัว เข้ากันได้กับไคลเอนต์หลายตัวที่ทำงานพร้อมกัน อุปกรณ์หนึ่งเครื่องเชื่อมต่อกับเซิร์ฟเวอร์หลายเครื่อง
รองรับการประมวลผลแบบซิงโครนัสและอะซิงโครนัส แอปพลิเคชันไม่จำเป็นต้องบล็อกและรอให้สิ้นเปลืองทรัพยากร CPU
รองรับการกำหนดค่า interceptor ในบางแพลตฟอร์ม ไคลเอนต์จะสมัครรับธีมระบบโดยอัตโนมัติตามค่าเริ่มต้น และธีมจากเซิร์ฟเวอร์จะเปลี่ยนทุกครั้ง ในกรณีนี้ คุณต้องใช้ตัวสกัดกั้นเพื่อดักจับและแยกธีมและข้อมูลข้อมูล และส่งมอบให้กับผู้ใช้ ซึ่งช่วยเพิ่มความยืดหยุ่นอย่างมาก
ด้วยเครื่องมือสร้างโค้ดออนไลน์ คุณสามารถสร้างโค้ดได้ด้วยการกำหนดค่าที่ง่ายมาก ที่อยู่: https://jiejietop.gitee.io/mqtt/index.html
มีอินเทอร์เฟซ API ที่เรียบง่าย โดยทั่วไปการกำหนดค่า mqttclient มีค่าเริ่มต้น โดยทั่วไปสามารถใช้งานได้โดยไม่ต้องกำหนดค่า นอกจากนี้ยังสามารถกำหนดค่าโดยพลการได้ การกำหนดค่ามีการตรวจจับความทนทาน ดังนั้นการออกแบบอินเทอร์เฟซ API ก็ง่ายมากเช่นกัน
สามารถกำหนดค่าและปรับแต่งพารามิเตอร์มัลติฟังก์ชั่น ได้ เชื่อมต่อช่วงเวลาใหม่ ระยะเวลาฮาร์ทบีท จำนวนการสมัครสมาชิกสูงสุด การหมดเวลาคำสั่ง ขนาดบัฟเฟอร์การอ่านและเขียน การประมวลผลอินเตอร์เซปเตอร์ ฯลฯ พารามิเตอร์สามารถปรับแต่งและกำหนดค่าได้เพื่อตอบสนองความต้องการของนักพัฒนา ซับซ้อนและง่ายต่อการ ใช้ในสภาพแวดล้อมการพัฒนาต่างๆ
รองรับการสมัครสมาชิกหัวข้อใหม่โดยอัตโนมัติ หลังจากเชื่อมต่อใหม่อัตโนมัติเพื่อให้แน่ใจว่าหัวข้อจะไม่สูญหาย
สนับสนุนไวด์การ์ดธีม ""#", "+"`
หัวข้อที่สมัครเป็นสมาชิกจะถูกแยกออกจากการประมวลผลข้อความโดยสิ้นเชิง ทำให้ตรรกะการเขียนโปรแกรมง่ายขึ้นและใช้งานง่ายขึ้น ผู้ใช้ไม่จำเป็นต้องจัดการกับความสัมพันธ์เชิงตรรกะที่ซับซ้อน
กลไกการประมวลผลแบบ Keep-alive ได้ถูกนำมาใช้ใน mqttclient โดยที่ผู้ใช้ไม่ต้องจัดการกับประสบการณ์ทางจิตวิทยา ผู้ใช้เพียงแค่มุ่งความสนใจไปที่ฟังก์ชันของแอปพลิเคชันเท่านั้น
มีการออกแบบที่ดีมาก ออกแบบ กลไกการบันทึก โดยใช้ทรัพยากรน้อยมาก และส่งข้อความอีกครั้งเมื่อข้อความสูญหายเพื่อให้แน่ใจว่าระดับคุณภาพบริการ qos1 และ qos2 รับประกันคุณภาพการบริการ
มีสไตล์โค้ดและแนวคิดที่ดีมาก : โค้ดทั้งหมดใช้การออกแบบแบบเลเยอร์ และการใช้งานโค้ดใช้แนวคิดของการประมวลผลแบบอะซิงโครนัสเพื่อลดการเชื่อมต่อและปรับปรุงประสิทธิภาพ
พัฒนาบนซ็อกเก็ต BSD มาตรฐาน ตราบใดที่เข้ากันได้กับระบบซ็อกเก็ต BSD
การเชื่อมต่อที่ราบรื่นของ Salof : เป็นเฟรมเวิร์กเอาท์พุตบันทึกแบบซิงโครนัสและแบบอะซิงโครนัส จะส่งออกข้อมูลบันทึกที่เกี่ยวข้องเมื่อไม่ได้ใช้งาน และยังสามารถเขียนข้อมูลลงในแฟลชเพื่อบันทึกได้ ซึ่งสะดวกสำหรับการดีบัก
ใช้แพ็คเกจไลบรารี paho mqtt ที่มีชื่อเสียง
ไม่มีการพึ่งพาอื่นใด
โปรเจ็กต์นี้มีเครื่องมือสร้างโค้ดที่ต้องใช้การกำหนดค่าออนไลน์เพื่อสร้างโค้ดเท่านั้น ซึ่งง่ายและสะดวกอย่างยิ่ง ที่อยู่เครื่องมือสร้างโค้ดคือ: https://jiebietop.gitee.io/mqtt/index.html
ROM รวม 1,0857 ไบต์ และโอเวอร์เฮดของ RAM เกือบจะขึ้นอยู่กับหน่วยความจำแบบไดนามิกเท่านั้น หากไม่ใช้การส่งผ่านที่เข้ารหัส TLS หน่วยความจำไดนามิกการสื่อสารที่รักษาคุณภาพระดับการบริการ QOS0 ต้องการเพียงประมาณ 3694 ไบต์ รวมบัฟเฟอร์การอ่าน 1024 + บัฟเฟอร์การเขียน 1024 + ขนาดสแต็กเธรดภายใน 1024 เมื่อเปรียบเทียบกับไคลเอนต์ MQTT อื่น mqttclient ต้องการโอเวอร์เฮดทรัพยากร RAM น้อยมาก
รหัส | ข้อมูลอาร์โอ | ข้อมูล RW | ข้อมูลซีไอ | ชื่อออบเจ็กต์ |
---|---|---|---|---|
7118 | 791 | 0 | 0 | mqttclient.o |
546 | 0 | 0 | 0 | mqttconnectclient.o |
212 | 0 | 0 | 0 | mqttdeserializepublish.o |
476 | 0 | 4 | 0 | mqttpacket.o |
236 | 0 | 0 | 0 | mqttserializepublish.o |
310 | 0 | 0 | 0 | mqttsubscribeclient.o |
38 | 0 | 0 | 0 | mqttunsubscribeclient.o |
56 | 0 | 0 | 0 | nettype_tcp.o |
62 | 0 | 0 | 0 | เครือข่าย.o |
24 | 0 | 0 | 0 | platform_memory.o |
40 | 0 | 0 | 0 | platform_mutex.o |
344 | 0 | 0 | 0 | platform_net_socket.o |
94 | 0 | 0 | 0 | platform_thread.o |
70 | 0 | 0 | 0 | platform_timer.o |
246 | 0 | 4 | 0 | สุ่ม.o |
62 | 0 | 0 | 0 | mqtt_list.o |
- | - | - | - | - |
10066 | 791 | 8 | 0 | ทั้งหมด |
มีกรอบชั้นที่ชัดเจนมาก
ที่ด้านบนของเฟรมเวิร์กคืออินเทอร์เฟซฟังก์ชัน API ซึ่งใช้งาน แอปพลิเคชันของลูกค้า ปล่อย ตั้งค่าพารามิเตอร์ เชื่อมต่อกับเซิร์ฟเวอร์ ยกเลิกการเชื่อมต่อ หัวข้อสมัครสมาชิก หัวข้อยกเลิกการสมัคร เผยแพร่ข้อความ และอินเทอร์เฟซการทำงานอื่น ๆ
ไลบรารี paho mqtt ที่มีชื่อเสียงถูกใช้เป็นไลบรารีแพ็กเก็ตข้อความ MQTT
กลไกการประมวลผลแบบอะซิงโครนัสใช้เพื่อจัดการ acks ทั้งหมด ไม่จำเป็นต้องรอการตอบสนองของเซิร์ฟเวอร์เมื่อส่งข้อความ แต่จะบันทึกเฉพาะข้อความเท่านั้น หลังจากได้รับ ack ของเซิร์ฟเวอร์แล้ว ให้ยกเลิกบันทึกนี้ มีประสิทธิภาพมาก ; และ เมื่อส่งข้อความ mqtt (QoS1/QoS2) และไม่ได้รับการตอบกลับจากเซิร์ฟเวอร์ ข้อความจะ ถูกส่งอีกครั้ง
เธรด ผลผลิต mqtt ถูกนำไปใช้ภายในเพื่อจัดการเนื้อหาทั้งหมดในลักษณะที่เป็นหนึ่งเดียว เช่น การประมวลผลการหมดเวลา การประมวลผลข้อความตอบรับ และการรับข้อความเผยแพร่จากเซิร์ฟเวอร์ ในเวลานี้ฟังก์ชันการโทรกลับจะถูกเรียกว่า แจ้งผู้ใช้เกี่ยวกับข้อมูลที่ได้รับ * โพสต์เผยแพร่, การประมวลผลข้อความหลังเสร็จสิ้น, ข้อความฮาร์ทบีท (คงอยู่) เมื่อตัดการเชื่อมต่อจากเซิร์ฟเวอร์ คุณต้องลองเชื่อมต่อใหม่ สมัครสมาชิกหัวข้อใหม่ ส่งข้อความอีกครั้งหรือตอบกลับ *รอ
การประมวลผลข้อความ เช่น การอ่านและการเขียนข้อความ การถอดรหัสข้อความ mqtt การตั้งค่าข้อความ (แฟล็กซ้ำ) การทำลายข้อความ และการดำเนินการอื่นๆ
เครือข่าย เป็นส่วนประกอบเครือข่ายซึ่งสามารถ เลือกช่องทางข้อมูลได้โดยอัตโนมัติ หากเป็นวิธีการเข้ารหัส การเข้ารหัส tls จะใช้สำหรับการรับส่งข้อมูล และ tls สามารถเลือก mbedtls เป็นแบ็กเอนด์การเข้ารหัสได้ มันอาจเป็นวิธี การเชื่อมต่อโดยตรงของ TCP จะถูกส่งผ่าน TCP ในที่สุด
platform เป็นเลเยอร์นามธรรมของแพลตฟอร์มที่ห่อหุ้มสิ่งต่าง ๆ จากระบบที่แตกต่างกัน เช่น socke หรือ AT, เธรด, เวลา, mutex, การจัดการหน่วยความจำ** สิ่งเหล่านี้เกี่ยวข้องกับระบบและจำเป็นสำหรับแพ็คเกจข้ามแพลตฟอร์มด้วย
ทางด้านขวาสุดคือเนื้อหาทั่วไป การประมวลผลรายการ ไลบรารีบันทึก การจัดการข้อผิดพลาด ซอฟต์แวร์สร้างตัวเลขสุ่ม ฯลฯ
ปัจจุบัน Linux, TencentOS Tiny, FreeRTOS, แพลตฟอร์ม RT-Thread ได้ถูกนำมาใช้แล้ว (แพ็คเกจซอฟต์แวร์ชื่อ kawaii-mqtt`) นอกเหนือจาก TencentOS Tiny AT Framework แล้วยังสามารถใช้งานได้ และความเสถียรก็ยอดเยี่ยม!
แพลตฟอร์ม | ที่ตั้งรหัส |
---|---|
ลินุกซ์ | https://github.com/jiebieTop/mqttclient |
TencentOS จิ๋วมาก | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
เฟรมเวิร์ก AT ขนาดเล็กของ TencentOS | https://github.com/jiejieTop/gokit3-board-mqttclient |
RT-เธรด | https://github.com/jiebieTop/kawaii-mqtt |
ฟรีRTOS | https://github.com/jiejieTop/freertos-mqttclient |
เวอร์ชันวางจำหน่าย | คำอธิบาย |
---|---|
[v1.0.0] | การเปิดตัวครั้งแรก เฟรมเวิร์กพื้นฐานที่สมบูรณ์ และการตรวจสอบความเสถียร |
[v1.0.1] | แก้ไขการประมวลผลแบบลอจิคัลเมื่อตัดการเชื่อมต่อจากเซิร์ฟเวอร์ |
[v1.0.2] | เพิ่มฟีเจอร์ดักจับใหม่ แก้ไขข้อบกพร่องเล็กๆ น้อยๆ |
[v1.0.3] | เพื่อหลีกเลี่ยงมลภาวะทั่วโลก ให้แก้ไขการตั้งชื่อบันทึกและฟังก์ชันที่เกี่ยวข้องกับรายการ |
[v1.0.4] | ปรับโครงสร้างเครือข่ายและช่องข้อมูล mbedtls ใหม่แล้ว |
[v1.1.0] | เวอร์ชันที่ใหญ่ขึ้นของการอัปเดต, การปรับโครงสร้างส่วนหนึ่งของโค้ด, ปรับตรรกะของการประมวลผล MQTT ให้เหมาะสม, ปรับปรุงความเสถียรโดยรวม, รองรับไคลเอนต์หลายตัว, รองรับการตั้งค่าพินัยกรรม, ปรับอินเทอร์เฟซ API ให้เหมาะสม และเพิ่มแพลตฟอร์มคลาวด์หลายตัว ทดสอบโค้ดและเอกสารประกอบ เพิ่ม เครื่องมือสร้างโค้ดออนไลน์ เครื่องมือกำหนดค่าการตัดออนไลน์ |
ยินดีต้อนรับสู่การส่งปัญหาและรายงานข้อบกพร่องในรูปแบบของปัญหา GitHub
mqttclient ปฏิบัติตามข้อตกลงโอเพ่นซอร์ส Apache License v2.0 ส่งเสริมการแบ่งปันรหัสและเคารพลิขสิทธิ์ของผู้เขียนต้นฉบับ คุณสามารถใช้และแก้ไขซอร์สโค้ดได้อย่างอิสระ หรือคุณสามารถเผยแพร่โค้ดที่แก้ไขเป็นซอฟต์แวร์โอเพ่นซอร์สหรือโอเพ่นซอร์สก็ได้
sudo apt-get install cmake g++
แพลตฟอร์มทดสอบ | ที่ตั้ง |
---|---|
emqx (เซิร์ฟเวอร์ส่วนตัวของฉัน) | ./test/emqx/test.c |
ไป่ตู้ เทียนกง | ./test/baidu/test.c |
วันเน็ต | ./test/onenet/test.c |
อาลีบาบา คลาวด์ อินเทอร์เน็ต ออฟ ธิงส์ | ./test/ali/test.c |
./build.sh
หลังจากการรันสคริปต์ build.sh ไฟล์ปฏิบัติการ emqx , baidu , onenet และแพลตฟอร์มอื่นๆ จะถูกสร้างขึ้นภายใต้ไดเร็กทอรี ./build/ bin/ โปรแกรมปฏิบัติการสามารถรันได้โดยตรง
./build/bin/emqx
./make-libmqttclient.sh
หลังจากการรันสคริปต์ make-libmqttclient.sh
ไฟล์ไลบรารีแบบไดนามิก libmqttclient.so
จะถูกสร้างขึ้นในไดเร็กทอรี ./libmqttclient/lib
/lib และติดตั้งลงในไดเร็กทอรี /usr/lib
ของระบบ ไฟล์ส่วนหัวที่เกี่ยวข้องจะถูกคัดลอกไปยังไฟล์ ./libmqttclient/include
ไดเร็กทอรีและคัดลอกไปยังโปรเจ็กต์ของคุณ คุณจะต้องลิงก์ไลบรารีไดนามิกเมื่อคอมไพล์แอปพลิเคชันเท่านั้น -lmqttclient -lpthread
ไฟล์คอนฟิกูเรชันของไลบรารีแบบไดนามิกขึ้นอยู่กับคอนฟิกูเรชัน . ./test/mqtt_config.h
หากคุณใช้คอมไพเลอร์ข้าม คุณควรส่งออกตัวแปรสภาพแวดล้อมที่เกี่ยวข้องตามคอมไพเลอร์ที่คุณใช้ (คอมไพเลอร์ข้ามที่ใช้ในที่นี้คือ arm-linux-gnueabihf-gcc) และคุณต้องตั้งค่าไฟล์ไลบรารีไดนามิก libmqttclient .so
ด้วย libmqttclient .so
ถูกคัดลอกไปยังไดเร็กทอรี /usr/lib
ของระบบฝังตัวของคุณ:
export CROSS_COMPILE=arm-linux-gnueabihf-
หากคุณต้องการถอนการติดตั้ง libmqttclient.so ให้รันคำสั่งต่อไปนี้:
./make-libmqttclient.sh remove
โปรดดูเอกสารประกอบ:
บทนำโปรโตคอล MQTT
กระบวนการสื่อสารโปรโตคอล MQTT
เครื่องมือสร้างโค้ด mqttclient
การกำหนดค่า mqttclient และเครื่องมือตัด
การออกแบบและการใช้งาน mqttclient
mqttclient เชื่อมต่อกับการเข้าถึง Baidu Tiangongwu
mqttclient เชื่อมต่อกับแพลตฟอร์มคลาวด์ OneNET
mqttclient เชื่อมต่อกับแพลตฟอร์ม Alibaba Cloud IoT