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 واجهة


__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)، الافتراضي هو MQTT
    • protocol_level: مستوى البروتوكول، تكون القيمة 4 عندما يكون protocol_name هو MQTT، و 3 عندما يكون protocol_name هو MQIsdp
    • clean_session: تنظيف الجلسة، الافتراضي هو true. تعيينه إلى false يمكن أن يجعل العميل يستقبل رسائل غير متصلة QoS 1 وQoS 2
    • reconnect_period: فترة إعادة الاتصال، الافتراضية 1 ثانية، و 0 تعني عدم إعادة الاتصال
    • connect_timeout: فترة انتهاء مهلة الاتصال بخادم MQTT، الافتراضي 30 ثانية
    • username: اسم المستخدم، اختيارية
    • password: كلمة المرور، اختيارية
    • will: رسالة الوصية، عندما ينقطع اتصال العميل، يقوم الوسيط تلقائيًا بإرسال رسالة الوصية إلى العملاء الآخرين. الصيغة:
      • topic: الموضوع
      • content: المحتوى
      • qos: مستوى QoS
      • retain: علامة retain
    • resubscribe: عند انقطاع الاتصال بشكل غير طبيعي وإعادة الاتصال، هل يجب إعادة الاشتراك في الموضوعات السابقة، الافتراضي هو true
    • bindto: لتحديد أي عنوان IP ومنفذ في الجهاز المحلي للاتصال بالوسيط، القيمة الافتراضية هي ''
    • ssl: خيارات ssl، الافتراضي هو false، إذا تم تعيينه إلى true، فسيتصل عبر ssl. يدعم أيضًا تمرير مصفوفة سياق ssl لتكوين الشهادات المحلية، إلخ، السياق ssl المرجع https://php.net/manual/en/context.ssl.php
    • debug: هل لتفعيل وضع التصحيح، وضع التصحيح يمكن أن يخرج معلومات تفصيلية حول الاتصال مع الوسيط، الافتراضي هو false
    • uri: عنوان uri لـ mqtt عبر الويب سوكيت، عادة يكون /mqtt

connect()

الاتصال بالوسيط


publish(String $topic, String $content, [array $options], [callable $callback])

لنشر رسالة إلى موضوع معين

  • $topic الموضوع
  • $content الرسالة
  • $options مصفوفة الخيارات، تشمل
    • qos مستوى QoS، الافتراضي 0
    • retain علامة retain، الافتراضي false
    • dup علامة إعادة الإرسال، الافتراضي false
  • $callback - function (\Exception $exception = null)، (لا يدعم هذا الإعداد عندما يكون QoS 0) يتم تنفيذه عند حدوث خطأ أو نجاح النشر، $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

المزيد من الأمثلة examples/workerman