workerman/mqtt
MQTT เป็นโปรโตคอลการส่งข้อความแบบ publish/subscribe ที่มีสถาปัตยกรรมลูกค้า-เซิร์ฟเวอร์ ได้กลายเป็นส่วนสำคัญของ IoT แนวคิดการออกแบบคือมีน้ำหนักเบา เปิดกว้าง ง่าย และมีมาตรฐาน ทำให้ใช้งานง่าย คุณลักษณะเหล่านี้ทำให้มันเป็นตัวเลือกที่ดีในหลาย ๆ สถานการณ์ โดยเฉพาะอย่างยิ่งสำหรับสภาพแวดล้อมที่มีข้อจำกัด เช่น การสื่อสารระหว่างเครื่องจักร (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 ผ่าน websocket
ตัวอย่าง
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();
รันใน command line 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();
รันใน command line 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: ระยะเวลาที่ลูกค้าส่งสัญญาณ heartbeat ไปยังเซิร์ฟเวอร์ โดยค่าเริ่มต้นคือ 50 วินาที, ตั้งค่าเป็น 0 จะไม่เปิดใช้งาน heartbeatclient_id: รหัสประจำตัวลูกค้า หากไม่ตั้งค่าจะใช้ค่าเริ่มต้นเป็น"workerman-mqtt-client-".mt_rand()protocol_name: ชื่อโปรโตคอล,MQTT(เวอร์ชัน 3.1.1) หรือMQIsdp(เวอร์ชัน 3.1), ค่าเริ่มต้นคือMQTTprotocol_level: ระดับโปรโตคอล, เมื่อprotocol_nameเป็นMQTTค่าจะเป็น4, เมื่อprotocol_nameเป็นMQIsdpค่าจะเป็น3clean_session: ล้างเซสชัน ค่าเริ่มต้นเป็นtrueตั้งค่าเป็นfalseจะสามารถรับข้อความออฟไลน์ระดับQoS 1และQoS 2reconnect_period: ระยะเวลาการเชื่อมต่อใหม่ ค่าเริ่มต้น1วินาที,0แสดงว่าไม่เชื่อมต่อใหม่connect_timeout: ระยะเวลาที่รอการเชื่อมต่อ mqtt ค่าเริ่มต้น30วินาทีusername: ชื่อผู้ใช้, ไม่บังคับpassword: รหัสผ่าน, ไม่บังคับwill: ข้อความสลาย เมื่อไคลเอ็นต์ขาดการเชื่อมต่อ Broker จะส่งข้อความสลายไปยังไคลเอนต์อื่น ๆ อัตโนมัติ รูปแบบคือ:topic: หัวข้อcontent: เนื้อหาqos: ระดับQoSretain: ธงretain
resubscribe: เมื่อต่อเชื่อมกับ Broker หายไปและเชื่อมต่อใหม่ จะต้องทำการสมัครรับข่าวสารหัวข้อก่อนหน้าหรือไม่ ค่าเริ่มต้นเป็น truebindtoใช้เพื่อกำหนดว่าเชื่อมต่อกับ Broker ด้วย IP และพอร์ตใด ค่าเริ่มต้นเป็น ''sslตัวเลือก ssl ค่าเริ่มต้นเป็นfalseหากตั้งค่าเป็นtrueจะเชื่อมต่อด้วย ssl สนับสนุนการส่งอาร์เรย์ context ssl เพื่อกำหนดค่าใบรับรองท้องถิ่น ข้อมูลเพิ่มเติมเกี่ยวกับ context ssl ดูที่ https://php.net/manual/en/context.ssl.phpdebugเปิดโหมด debug หรือไม่ โหมด debug สามารถแสดงรายละเอียดการสื่อสารกับ Broker ค่าเริ่มต้นเป็นfalseuriที่อยู่ของ mqtt ผ่าน websocket ปกติจะเป็น/mqtt
connect()
เชื่อมต่อกับ Broker
publish(String $topic, String $content, [array $options], [callable $callback])
ส่งข้อความไปยังหัวข้อหนึ่ง
$topicหัวข้อ$contentข้อความ$optionsอาร์เรย์ตัวเลือก รวมถึงqosระดับQoS, ค่าเริ่มต้น0retainธง retain ค่าเริ่มต้นfalsedupธงการส่งซ้ำ, ค่าเริ่มต้น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 = [])
ฟังก์ชัน callback ที่เรียกใช้เมื่อการสมัครรับข่าวสารสำเร็จหรือเกิดข้อผิดพลาดexceptionวัตถุข้อยกเว้น เมื่อไม่มีข้อผิดพลาดเกิดขึ้นคือnullเช่นเดียวกันgrantedอาร์เรย์ผลลัพธ์การสมัครรับข่าวสาร คล้ายกับarray('topic' => 'qos', 'topic' => 'qos')ซึ่ง:topicคือหัวข้อที่สมัครรับqosคือระดับQoSที่ Broker ยอมรับ
unsubscribe(mixed $topic, [callable $callback])
ยกเลิกการสมัครสมาชิก
$topicเป็นสตริงหรืออาร์เรย์ของสตริง คล้ายกับarray('topic1', 'topic2')$callback-function (\Exception $e = null), ฟังก์ชัน callback ที่เรียกใช้เมื่อสำเร็จหรือผิดพลาด
disconnect()
ตัดการเชื่อมต่อกับ Broker อย่างถูกต้อง ข้อความ DISCONNECT จะถูกส่งไปยัง Broker
close()
บังคับตัดการเชื่อมต่อกับ Broker จะไม่ส่งข้อความ DISCONNECT ไปยัง Broker
callback onConnect(Client $mqtt)
จะเรียกใช้เมื่อการเชื่อมต่อกับ Broker เสร็จสมบูรณ์ ในช่วงเวลานั้นได้มีการรับข้อความ CONNACK จาก Broker
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