中文说明
عميل MQTT عالي الأداء وعالي الاستقرار وعبر الأنظمة الأساسية
عميل MQTT عالي الأداء وعالي الاستقرار ومتعدد المنصات، تم تطويره استنادًا إلى واجهة برمجة تطبيقات المقبس، ويمكن استخدامه على الأجهزة المدمجة (FreeRTOS/LiteOS/RT-Thread/TencentOS tiny)، وLinux، وWindows، وMac، ويحتوي على موجزة للغاية تدرك واجهة API جودة خدمة QOS2 بموارد قليلة جدًا، وتربط مكتبة تشفير mbedtls بسلاسة.
ثبات عالٍ للغاية : سواء كان الأمر يتعلق بالإسقاط وإعادة الاتصال أو فقدان الحزمة أو إعادة الإرسال ، فإنه يلتزم بشكل صارم بمعايير بروتوكول MQTT ، بالإضافة إلى أن اختبار حجم البيانات الكبير يكون مستقرًا للغاية سواء تم استلامه أو إرساله، واختبار التردد العالي كما أنها مستقرة جدًا.
خفيف الوزن : مشروع الكود بأكمله بسيط للغاية. بدون mbedtls، فإنه يستهلك موارد قليلة جدًا. استخدم المؤلف وحدة esp8266 للتواصل مع السحابة. يستهلك رمز المشروع بأكمله أقل من 15 كيلو من ذاكرة الوصول العشوائي.
دعم النقل المشفر بـ mbedtls ، وجعل نقل الشبكة أكثر أمانًا، ولا تتطلب طبقة الواجهة من المستخدمين الاهتمام، بغض النظر عما إذا كانت مشفرة أم لا، تم إصلاح mqttclient لواجهة API المقدمة من قبل المستخدم، وهي متوافقة جدًا مجموعة يمكن إرسال الرموز نيابة عن طبقة التطبيق مع أو بدون تشفير.
يدعم عملاء متعددين ، متوافق مع عملاء متعددين يعملون في نفس الوقت، جهاز واحد متصل بخوادم متعددة.
يدعم المعالجة المتزامنة وغير المتزامنة ، ولا تحتاج التطبيقات إلى الحظر والانتظار لإهدار موارد وحدة المعالجة المركزية.
دعم تكوين المعترض ، في بعض الأنظمة الأساسية، سيشترك العميل تلقائيًا في سمة النظام بشكل افتراضي، ويتغير السمة من الخادم في كل مرة. في هذه الحالة، تحتاج إلى استخدام أداة اعتراضية لاعتراض وفصل معلومات الموضوع والبيانات وتسليمها للمستخدمين، مما يؤدي إلى تحسين المرونة بشكل كبير.
باستخدام أداة إنشاء التعليمات البرمجية عبر الإنترنت ، يمكن إنشاء التعليمات البرمجية بتكوين بسيط للغاية، العنوان: https://jiejietop.gitee.io/mqtt/index.html
يحتوي على واجهة API بسيطة جدًا ، بشكل عام، يحتوي تكوين mqttclient على قيم افتراضية، ويمكن استخدامه بشكل أساسي بدون تكوين، ويمكن أيضًا تكوينه بشكل تعسفي، والتكوين لديه كشف عن المتانة، لذلك تم تصميم واجهة API أيضًا بسيطة جدًا.
يمكن تكوين المعلمات متعددة الوظائف وتخصيصها ، وإعادة الاتصال بالفاصل الزمني، وفترة نبضات القلب، والحد الأقصى لعدد الاشتراكات، ومهلة الأوامر، وحجم المخزن المؤقت للقراءة والكتابة، ومعالجة المعترضات، وما إلى ذلك. يمكن تصميم المعلمات وتكوينها لتلبية احتياجات المطورين. استخدامها في بيئات التطوير المختلفة.
دعم إعادة الاشتراك التلقائي للمواضيع ، بعد إعادة الاتصال التلقائي لضمان عدم فقدان المواضيع.
دعم أحرف البدل للموضوع ""#"، "+"` .
يتم فصل المواضيع المشتركة تمامًا عن معالجة الرسائل ، مما يجعل منطق البرمجة أسهل وأسهل في الاستخدام، ولا يضطر المستخدمون إلى التعامل مع علاقات منطقية معقدة.
تم تنفيذ آلية المعالجة المستمرة في mqttclient ، دون أن يضطر المستخدم إلى التعامل مع التجربة النفسية، يحتاج المستخدم فقط إلى التركيز على وظيفة التطبيق.
يتمتع بتصميم جيد جدًا ، ويصمم آلية التسجيل بموارد قليلة جدًا، ويعيد إرسال الرسالة عند فقدانها للتأكد من أن مستويات جودة الخدمة qos1 و qos2 تضمن جودة الخدمة.
هناك أنماط وأفكار جيدة جدًا للتعليمات البرمجية : يعتمد الكود بأكمله تصميمًا متعدد الطبقات، ويعتمد تنفيذ الكود فكرة المعالجة غير المتزامنة لتقليل الاقتران وتحسين الأداء.
تم تطويره فوق مقبس BSD القياسي ، طالما أنه متوافق مع نظام مقبس BSD.
اتصال سلس لـ salof : إنه إطار إخراج سجل متزامن وغير متزامن. يقوم بإخراج معلومات السجل المقابلة عندما يكون خاملاً، ويمكنه أيضًا كتابة المعلومات في الفلاش لحفظها، وهو أمر مناسب لتصحيح الأخطاء.
استخدم حزمة مكتبة paho mqtt الشهيرة .
لا تبعيات أخرى .
يحتوي هذا المشروع على أداة لإنشاء التعليمات البرمجية التي تتطلب فقط التكوين عبر الإنترنت لإنشاء التعليمات البرمجية، وهي بسيطة للغاية وسهلة الاستخدام. عنوان أداة إنشاء التعليمات البرمجية هو: https://jiejietop.gitee.io/mqtt/index.html
إجمالي 10857 بايت من ذاكرة القراءة فقط (ROM)، ويعتمد الحمل الزائد لذاكرة الوصول العشوائي (RAM) تقريبًا فقط على الذاكرة الديناميكية. بدون استخدام الإرسال المشفر TLS، تتطلب ذاكرة الاتصال الديناميكية التي تحافظ على جودة مستوى الخدمة QOS0 حوالي 3694 بايت فقط. بما في ذلك 1024 مخزن قراءة مؤقت + 1024 مخزن مؤقت للكتابة + 1024 حجم مكدس الخيط الداخلي، مقارنة بعملاء MQTT الآخرين، يتطلب mqttclient مقدارًا صغيرًا جدًا من موارد ذاكرة الوصول العشوائي (RAM).
شفرة | بيانات ريال عماني | بيانات آر دبليو | بيانات زي | اسم الكائن |
---|---|---|---|---|
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.
يتم استخدام آلية المعالجة غير المتزامنة لإدارة جميع عمليات الوصول. لا يحتاج إلى انتظار استجابة الخادم عند إرسال الرسالة، ولكنه يسجلها فقط. بعد تلقي إشعار الخادم، قم بإلغاء هذا السجل، وهو فعال للغاية ؛ وعندما يتم إرسال رسالة mqtt (QoS1/QoS2) ولم يتم تلقي أي استجابة من الخادم، سيتم إعادة إرسال الرسالة.
يتم تنفيذ مؤشر ترابط العائد mqtt داخليًا للتعامل مع كل المحتوى بطريقة موحدة، مثل معالجة المهلة ومعالجة رسائل ack واستلام رسالة النشر من الخادم ، في هذا الوقت سيتم استدعاء وظيفة رد الاتصال لإبلاغ المستخدم بالبيانات المستلمة، * الإصدار اللاحق، معالجة الرسائل بعد الإكمال، الرسالة النبضية (البقاء على قيد الحياة)، عند قطع الاتصال بالخادم، تحتاج إلى محاولة إعادة الاتصال، أو إعادة الاشتراك في الموضوع، أو إعادة إرسال الرسالة أو الرد *انتظر.
معالجة الرسائل مثل قراءة وكتابة الرسائل وفك تشفير رسائل mqtt وإعداد الرسائل (dup flag) وتدمير الرسائل وغيرها من العمليات.
الشبكة عبارة عن مكون شبكة يمكنه تحديد قناة بيانات تلقائيًا ، إذا كانت طريقة تشفير، فسيتم استخدام تشفير TLS لنقل البيانات، ويمكن لـ TLS اختيار mbedtls كواجهة خلفية للتشفير؛ يمكن أيضًا أن يتم نقل طريقة الاتصال المباشر لـ tcp في النهاية عبر tcp.
النظام الأساسي عبارة عن طبقة تجريد النظام الأساسي التي تقوم بتغليف أشياء من أنظمة مختلفة، مثل socke أو AT، والخيط، والوقت، وmutex، وإدارة الذاكرة **، وهي تتعامل مع النظام وهي ضرورية أيضًا للحزمة عبر الأنظمة الأساسية.
في أقصى اليمين يوجد المحتوى العام، ومعالجة القائمة، ومكتبة السجل، ومعالجة الأخطاء، ومولد الأرقام العشوائية للبرنامج ، وما إلى ذلك.
في الوقت الحاضر، تم تنفيذ منصات Linux و TencentOS tiny و FreeRTOS و RT-Thread (تسمى حزمة البرامج kawaii-mqtt`)، بالإضافة إلى أنه يمكن أيضًا استخدام إطار عمل TencentOS tiny AT، والاستقرار ممتاز!
منصة | موقع الرمز |
---|---|
لينكس | https://github.com/jiejieTop/mqttclient |
TencentOS صغير الحجم | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
إطار TencentOS الصغير AT | https://github.com/jiejieTop/gokit3-board-mqttclient |
RT-الموضوع | https://github.com/jiejieTop/kawaii-mqtt |
FreeRTOS | https://github.com/jiejieTop/freertos-mqttclient |
إصدار الإصدار | وصف |
---|---|
[الإصدار 1.0.0] | الإصدار الأولي والإطار الأساسي الكامل والتحقق من الاستقرار |
[الإصدار 1.0.1] | إصلاح المعالجة المنطقية عند قطع الاتصال بالخادم بشكل نشط |
[الإصدار 1.0.2] | أضف ميزة اعتراضية جديدة، وأصلح بعض الأخطاء الصغيرة |
[الإصدار 1.0.3] | لتجنب التلوث العالمي، قم بتعديل تسمية السجل وقائمة الوظائف ذات الصلة |
[الإصدار 1.0.4] | تم إعادة تعديل بنية الشبكة وقناة بيانات mbedtls |
[الإصدار 1.1.0] | إصدار أكبر من التحديث، وإعادة هيكلة جزء من التعليمات البرمجية، وتحسين منطق معالجة MQTT، وتحسين الاستقرار العام، ودعم عملاء متعددين، ودعم إعداد الإرادة، وتحسين واجهة API، وإضافة منصات سحابية متعددة، واختبار التعليمات البرمجية والوثائق، وإضافة أداة إنشاء التعليمات البرمجية عبر الإنترنت، وأداة تكوين القطع عبر الإنترنت |
مرحبًا بك في إرسال المشكلات وتقارير الأخطاء في شكل مشكلات GitHub
يتبع mqttclient اتفاقية ترخيص Apache 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
، وتثبيته في دليل /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 Access
يتصل mqttclient بمنصة OneNET السحابية
يتصل mqttclient بمنصة Alibaba Cloud IoT