中文说明
Klien MQTT lintas platform yang berkinerja tinggi, berstabilitas tinggi
Klien MQTT lintas platform berkinerja tinggi, berstabilitas tinggi, dikembangkan berdasarkan API soket, dapat digunakan pada perangkat tertanam (FreeRTOS/LiteOS/RT-Thread/TencentOS kecil), Linux, Windows, Mac, dan memiliki sangat ringkas Antarmuka API menyadari kualitas layanan QOS2 dengan sumber daya yang sangat sedikit, dan menghubungkan perpustakaan enkripsi mbedtls dengan mulus.
Stabilitas yang sangat tinggi : apakah itu jatuh dan terhubung kembali , kehilangan paket dan transmisi ulang , itu benar-benar mematuhi standar protokol MQTT , selain itu pengujian volume data besar sangat stabil baik menerima atau mengirim, dan pengujian frekuensi tinggi juga sangat stabil.
Ringan : Seluruh proyek kode sangat sederhana. Tanpa mbedtls, sumber daya yang dibutuhkan sangat sedikit. Penulis menggunakan modul esp8266 untuk berkomunikasi dengan cloud. Seluruh kode proyek mengkonsumsi kurang dari 15k RAM.
Mendukung transmisi terenkripsi mbedtls , membuat transmisi jaringan lebih aman, dan lapisan antarmuka tidak mengharuskan pengguna untuk peduli, tidak peduli apakah itu dienkripsi atau tidak, mqttclient diperbaiki untuk antarmuka API yang disediakan oleh pengguna, yang sangat kompatibel Satu set kode atas nama lapisan aplikasi dapat ditransmisikan dengan atau tanpa enkripsi.
Mendukung banyak klien , kompatibel dengan banyak klien yang berjalan secara bersamaan, satu perangkat terhubung ke beberapa server.
Mendukung pemrosesan sinkron dan asinkron , aplikasi tidak perlu memblokir dan menunggu untuk membuang sumber daya CPU.
Mendukung konfigurasi interseptor , pada beberapa platform, klien akan secara otomatis berlangganan tema sistem secara default, dan tema dari server berubah setiap saat. Dalam hal ini, Anda perlu menggunakan pencegat untuk mencegat dan memisahkan tema dan data Informasi dan mengirimkannya ke pengguna, sehingga sangat meningkatkan fleksibilitas.
Dengan alat pembuatan kode online , kode dapat dibuat dengan konfigurasi yang sangat sederhana, alamat: https://jiejietop.gitee.io/mqtt/index.html
Memiliki antarmuka API yang sangat sederhana , secara umum konfigurasi mqttclient memiliki nilai default, pada dasarnya dapat digunakan tanpa konfigurasi, juga dapat dikonfigurasi secara sewenang-wenang, konfigurasi memiliki deteksi ketahanan, sehingga dirancang Antarmuka API juga sangat sederhana.
Parameter multifungsi dapat dikonfigurasi dan disesuaikan , menghubungkan kembali interval waktu, periode detak jantung, jumlah maksimum langganan, batas waktu perintah, ukuran buffer baca dan tulis, pemrosesan interseptor, dll. Parameter dapat disesuaikan dan dikonfigurasi untuk memenuhi kebutuhan pengembang Kompleks dan sederhana untuk digunakan di berbagai lingkungan pengembangan.
Mendukung langganan ulang topik secara otomatis , setelah koneksi ulang otomatis untuk memastikan bahwa topik tidak akan hilang.
Mendukung wildcard tema ""#", "+"` .
Topik berlangganan benar-benar terpisah dari pemrosesan pesan , membuat logika pemrograman lebih mudah dan mudah digunakan, pengguna tidak perlu berurusan dengan hubungan logis yang rumit.
Mekanisme pemrosesan keep-alive telah diterapkan di mqttclient , tanpa pengguna harus menghadapi pengalaman psikologis, pengguna hanya perlu berkonsentrasi pada fungsi aplikasi.
Memiliki desain yang sangat bagus , merancang mekanisme perekaman dengan sumber daya yang sangat sedikit, dan mengirimkan ulang pesan ketika hilang untuk memastikan bahwa tingkat kualitas layanan qos1 dan qos2 menjamin kualitas layanannya.
Ada gaya dan ide kode yang sangat bagus : Seluruh kode mengadopsi desain berlapis, dan implementasi kode mengadopsi gagasan pemrosesan asinkron untuk mengurangi penggandengan dan meningkatkan kinerja.
Dikembangkan di atas soket BSD standar , asalkan kompatibel dengan sistem soket BSD.
Koneksi salof yang mulus : Ini adalah kerangka keluaran log yang sinkron dan asinkron. Ini mengeluarkan informasi log yang sesuai saat tidak digunakan, dan juga dapat menulis informasi ke dalam flash untuk menyimpannya, yang memudahkan untuk debugging.
Gunakan paket perpustakaan paho mqtt yang terkenal .
Tidak ada ketergantungan lain .
Proyek ini memiliki alat pembuatan kode yang hanya memerlukan konfigurasi online untuk menghasilkan kode, yang sangat sederhana dan mudah digunakan. Alamat alat pembuatan kode adalah: https://jiejietop.gitee.io/mqtt/index.html
Total ROM 10857 byte , dan overhead RAM hampir hanya bergantung pada memori dinamis. Tanpa menggunakan transmisi terenkripsi TLS, memori dinamis komunikasi yang mempertahankan kualitas tingkat layanan QOS0 hanya membutuhkan sekitar 3694 byte. Termasuk 1024 buffer baca + 1024 buffer tulis + 1024 ukuran tumpukan thread internal, dibandingkan dengan klien MQTT lainnya, mqttclient memerlukan overhead sumber daya RAM yang sangat sedikit.
Kode | Data RO | Data RW | Data ZI | Nama Objek |
---|---|---|---|---|
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 | jaringan.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 | acak.o |
62 | 0 | 0 | 0 | mqtt_list.o |
- | - | - | - | - |
10066 | 791 | 8 | 0 | total |
Memiliki kerangka berlapis yang sangat jelas.
Di bagian atas kerangka kerja adalah antarmuka fungsi API , yang mengimplementasikan aplikasi klien, melepaskan, mengatur parameter, menyambung ke server, memutuskan sambungan, berlangganan topik, berhenti berlangganan topik, menerbitkan pesan, dan antarmuka fungsional lainnya.
Perpustakaan paho mqtt yang terkenal digunakan sebagai perpustakaan paket pesan MQTT.
Mekanisme pemrosesan asinkron digunakan untuk mengelola semua tindakan. Tidak perlu menunggu respon server saat mengirimkan pesan, namun hanya mencatatnya saja. Setelah menerima ack server, batalkan catatan ini, sangat efisien ; dan Ketika pesan mqtt (QoS1/QoS2) terkirim dan tidak ada respons yang diterima dari server, pesan tersebut akan dikirim ulang .
Utas hasil mqtt diimplementasikan secara internal untuk menangani semua konten secara terpadu, seperti pemrosesan batas waktu, pemrosesan pesan ack, dan penerimaan pesan publikasi dari server , saat ini fungsi panggilan balik akan dipanggil Beri tahu pengguna tentang data yang diterima, * pasca rilis, pemrosesan pesan pasca selesai, pesan detak jantung (tetap hidup), ketika terputus dari server, Anda perlu mencoba menyambung kembali, berlangganan kembali topik, mengirim ulang pesan atau membalas * Tunggu.
Pemrosesan pesan, seperti membaca dan menulis pesan, mendekode pesan mqtt, mengatur pesan (dup flag), menghancurkan pesan dan operasi lainnya.
jaringan adalah komponen jaringan, yang secara otomatis dapat memilih saluran data , jika itu adalah metode enkripsi, enkripsi tls digunakan untuk transmisi data, dan tls dapat memilih mbedtls sebagai backend enkripsi; bisa juga Metode koneksi langsung tcp pada akhirnya ditransmisikan melalui tcp.
platform adalah lapisan abstraksi platform yang merangkum hal-hal dari sistem yang berbeda, seperti socke atau AT, thread, time, mutex, manajemen memori**, ini berhubungan dengan sistem dan juga diperlukan untuk Paket lintas platform.
Di paling kanan adalah konten umum, pemrosesan daftar, perpustakaan log, penanganan kesalahan, perangkat lunak pembuat nomor acak , dll.
Saat ini, platform Linux, TencentOS tiny, FreeRTOS, RT-Thread telah diimplementasikan (paket perangkat lunak diberi nama kawaii-mqtt`), selain kerangka AT kecil TencentOS juga dapat digunakan, dan stabilitasnya sangat baik!
Platform | Lokasi Kode |
---|---|
Linux | https://github.com/jiejieTop/mqttclient |
TencentOS kecil | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
Kerangka AT kecil TencentOS | https://github.com/jiejieTop/gokit3-board-mqttclient |
RT-Utas | https://github.com/jiejieTop/kawaii-mqtt |
GratisRTOS | https://github.com/jiejieTop/freertos-mqttclient |
Versi Rilis | Keterangan |
---|---|
[v1.0.0] | Rilis awal, kerangka dasar lengkap dan verifikasi stabilitas |
[v1.0.1] | Perbaiki pemrosesan logis saat memutuskan sambungan secara aktif dari server |
[v1.0.2] | Tambahkan pencegat fitur baru, perbaiki beberapa bug kecil |
[v1.0.3] | Untuk menghindari polusi global, ubah penamaan log dan daftar fungsi terkait |
[v1.0.4] | Struktur jaringan dan saluran data mbedtls disesuaikan kembali |
[v1.1.0] | Versi pembaruan yang lebih besar, memfaktorkan ulang sebagian kode, mengoptimalkan logika pemrosesan MQTT, meningkatkan stabilitas keseluruhan, mendukung banyak klien, mendukung pengaturan kemauan, mengoptimalkan antarmuka API, dan menambahkan beberapa platform cloud Uji kode dan dokumentasi, tambahkan alat pembuatan kode online, alat konfigurasi pemotongan online |
Selamat mengirimkan masalah dan laporan bug dalam bentuk Masalah GitHub
mqttclient mengikuti perjanjian sumber terbuka Lisensi Apache v2.0. Mendorong berbagi kode dan menghormati hak cipta penulis asli. Anda dapat dengan bebas menggunakan dan memodifikasi kode sumber, atau Anda dapat mempublikasikan kode yang dimodifikasi sebagai perangkat lunak sumber terbuka atau sumber tertutup.
sudo apt-get install cmake g++
Platform Uji | Lokasi |
---|---|
emqx (server yang saya gunakan secara pribadi) | ./test/emqx/test.c |
Baidu Tiangong | ./test/baidu/test.c |
onenet | ./test/onenet/test.c |
Internet of Things Alibaba Cloud | ./test/ali/test.c |
./build.sh
Setelah menjalankan skrip build.sh , file yang dapat dieksekusi emqx , baidu , onenet dan platform lainnya akan dihasilkan di bawah direktori ./build/bin/ Program yang dapat dijalankan dapat dijalankan secara langsung.
./build/bin/emqx
./make-libmqttclient.sh
Setelah menjalankan skrip make-libmqttclient.sh
, file perpustakaan dinamis libmqttclient.so
akan dibuat di direktori ./libmqttclient/lib
, dan dipasang ke direktori /usr/lib
sistem, file header yang relevan telah disalin ke ./libmqttclient/include
direktori dan salin ke proyek Anda. Anda hanya perlu menautkan perpustakaan dinamis saat mengkompilasi aplikasi. -lmqttclient -lpthread
, file konfigurasi perpustakaan dinamis didasarkan pada konfigurasi ./test/mqtt_config.h
.
Jika Anda menggunakan kompiler silang, Anda harus mengekspor variabel lingkungan yang sesuai sesuai dengan kompiler yang Anda gunakan (kompiler silang yang digunakan di sini adalah arm-linux-gnueabihf-gcc), dan Anda juga harus menyetel file perpustakaan dinamis libmqttclient .so
disalin ke direktori /usr/lib
sistem tertanam Anda:
export CROSS_COMPILE=arm-linux-gnueabihf-
Jika Anda perlu menghapus instalasi libmqttclient.so , jalankan perintah berikut:
./make-libmqttclient.sh remove
Silakan lihat dokumentasi:
Pengenalan Protokol MQTT
Proses komunikasi protokol MQTT
alat pembuatan kode mqttclient
konfigurasi mqttclient dan alat pemotong
desain dan implementasi mqttclient
mqttclient terhubung ke Akses Baidu Tiangongwu
mqttclient terhubung ke platform cloud OneNET
mqttclient terhubung ke platform Alibaba Cloud IoT