workerman/mqtt
MQTT هو بروتوكول نقل الرسائل بنمط نشر/اشتراك على هيكلية عميل-خادم، وقد أصبح جزءًا مهمًا من إنترنت الأشياء. فكرته التصميمية بسيطة، مفتوحة، خفيفة الوزن، ومنظمة، مما يجعل من السهل تنفيذها. تجعل هذه الخصائص منه خيارًا جيدًا للعديد من السيناريوهات، خاصة في البيئات المقيدة مثل الاتصال بين الآلات (M2M) وبيئات إنترنت الأشياء (IoT).
workerman\mqtt هو مكتبة عميل MQTT غير متزامنة مستندة إلى workerman، يمكن استخدامها لاستقبال أو إرسال رسائل بروتوكول MQTT. يدعم QoS 0، QoS 1، وQoS 2. كما يدعم إصدارات MQTT 3.1، 3.1.1، و5.
مشروع العنوان
https://github.com/walkor/mqtt
التثبيت
composer require workerman/mqtt
الدعم
- MQTT
- MQTT5
- MQTT عبر الويب سوكيت
مثال
subscribe.php
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function(){
$mqtt = new Workerman\Mqtt\Client('mqtt://test.mosquitto.org:1883');
$mqtt->onConnect = function($mqtt) {
$mqtt->subscribe('test');
};
$mqtt->onMessage = function($topic, $content){
var_dump($topic, $content);
};
$mqtt->connect();
};
Worker::runAll();
تشغيل من خلال سطر الأوامر php subscribe.php start للإقلاع
publish.php
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function(){
$mqtt = new Workerman\Mqtt\Client('mqtt://test.mosquitto.org:1883');
$mqtt->onConnect = function($mqtt) {
$mqtt->publish('test', 'hello workerman mqtt');
};
$mqtt->connect();
};
Worker::runAll();
تشغيل من خلال سطر الأوامر php publish.php start للإقلاع.
workerman\mqtt\Client واجهة
Client::__construct()Client::connect()Client::publish()Client::subscribe()Client::unsubscribe()Client::disconnect()Client::close()callback onConnectcallback onMessagecallback onErrorcallback onClose
__construct (string $address, [array $options])
إنشاء مثيل عميل MQTT.
-
$addressعنوان خادم MQTT، بصيغة مشابهة لـ 'mqtt://test.mosquitto.org:1883'. -
$optionsمصفوفة خيارات العميل، يمكن تحديد الخيارات التالية:keepalive: الفترة الزمنية التي يرسل فيها العميل نبضات قلب إلى الخادم، الافتراضي 50 ثانية، تعيينها إلى 0 يعني عدم تفعيل نبض القلبclient_id: معرف العميل، إذا لم يتم تعيينه، سيتم تعيينه تلقائيًا إلى"workerman-mqtt-client-".mt_rand()protocol_name: اسم البروتوكول،MQTT(الإصدار 3.1.1) أوMQIsdp(الإصدار 3.1)، الافتراضي هوMQTTprotocol_level: مستوى البروتوكول، تكون القيمة4عندما يكونprotocol_nameهوMQTT، و3عندما يكونprotocol_nameهوMQIsdpclean_session: تنظيف الجلسة، الافتراضي هوtrue. تعيينه إلىfalseيمكن أن يجعل العميل يستقبل رسائل غير متصلةQoS 1وQoS 2reconnect_period: فترة إعادة الاتصال، الافتراضية1ثانية، و0تعني عدم إعادة الاتصالconnect_timeout: فترة انتهاء مهلة الاتصال بخادم MQTT، الافتراضي30ثانيةusername: اسم المستخدم، اختياريةpassword: كلمة المرور، اختياريةwill: رسالة الوصية، عندما ينقطع اتصال العميل، يقوم الوسيط تلقائيًا بإرسال رسالة الوصية إلى العملاء الآخرين. الصيغة:topic: الموضوعcontent: المحتوىqos: مستوىQoSretain: علامةretain
resubscribe: عند انقطاع الاتصال بشكل غير طبيعي وإعادة الاتصال، هل يجب إعادة الاشتراك في الموضوعات السابقة، الافتراضي هوtruebindto: لتحديد أي عنوان IP ومنفذ في الجهاز المحلي للاتصال بالوسيط، القيمة الافتراضية هي ''ssl: خيارات ssl، الافتراضي هوfalse، إذا تم تعيينه إلىtrue، فسيتصل عبر ssl. يدعم أيضًا تمرير مصفوفة سياق ssl لتكوين الشهادات المحلية، إلخ، السياق ssl المرجع https://php.net/manual/en/context.ssl.phpdebug: هل لتفعيل وضع التصحيح، وضع التصحيح يمكن أن يخرج معلومات تفصيلية حول الاتصال مع الوسيط، الافتراضي هوfalseuri: عنوان uri لـ mqtt عبر الويب سوكيت، عادة يكون/mqtt
connect()
الاتصال بالوسيط
publish(String $topic, String $content, [array $options], [callable $callback])
لنشر رسالة إلى موضوع معين
$topicالموضوع$contentالرسالة$optionsمصفوفة الخيارات، تشملqosمستوىQoS، الافتراضي0retainعلامةretain، الافتراضيfalsedupعلامة إعادة الإرسال، الافتراضيfalse
$callback-function (\Exception $exception = null)، (لا يدعم هذا الإعداد عندما يكون QoS0) يتم تنفيذه عند حدوث خطأ أو نجاح النشر،$exceptionهو كائن الاستثناء، عندما لا يحدث خطأ، يكون$exceptionهوnull، وما إلى ذلك.
subscribe(mixed $topic, [array $options], [callable $callback])
الاشتراك في موضوع أو عدة مواضيع
$topicهو سلسلة (للاشتراك في موضوع واحد) أو مصفوفة (للاشتراك في عدة مواضيع)،
عند الاشتراك في عدة مواضيع،$topicهو الموضوع كمفتاح وQoSكقيمة لمصفوفة، مثلarray('topic1'=> 0, 'topic2'=> 1)$optionsمصفوفة خيارات الاشتراك، تتضمن الإعدادات التالية:qosمستوىQoS، الافتراضي0
$callback-function (\Exception $exception = null, array $granted = [])
دالة رد الاتصال، يتم تنفيذها عند نجاح الاشتراك أو حدوث خطأexceptionكائن الاستثناء، عند عدم حدوث أخطاء يكونnull، وما إلى ذلكgrantedمصفوفة نتائج الاشتراك، على غرارarray('topic' => 'qos', 'topic' => 'qos')حيث:topicهو الموضوع المشتركqosمستوىQoSالذي قبله الوسيط
unsubscribe(mixed $topic, [callable $callback])
إلغاء الاشتراك
$topicهو سلسلة أو مصفوفة من السلاسل، مثلarray('topic1', 'topic2')$callback-function (\Exception $e = null)، يتم تنفيذ رد الاتصال عند النجاح أو الفشل
disconnect()
فصل الاتصال بالوسيط بشكل عادي، ستُرسل رسالة DISCONNECT إلى الوسيط.
close()
فصل الاتصال بالوسيط بالقوة، لن تُرسل رسالة DISCONNECT إلى الوسيط.
callback onConnect(Client $mqtt)
يتم تنفيذه عند تأسيس الاتصال بالوسيط. في هذه المرحلة ، تم استلام رسالة CONNACK من الوسيط.
callback onMessage(String $topic, String $content, Client $mqtt)
function (topic, message, packet) {}
يتم تنفيذه عند استلام العميل رسالة Publish
$topicالموضوع المستلم$contentمحتوى الرسالة المستلمة$mqttمثيل عميل mqtt.
callback onError(\Exception $exception = null)
يتم تنفيذه عند حدوث خطأ معين في الاتصال
callback onClose()
يتم تنفيذه عند إغلاق الاتصال، سواء كان العميل هو من أغلقه أو الخادم هو من أغلقه، سيتم تنفيذه onClose