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
ตัวอย่าง
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 onConnect
callback onMessage
callback onError
callback 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) ค่าเริ่มต้นคือMQTT
protocol_level
: ระดับโพรโตคอล เมื่อprotocol_name
เป็นMQTT
ค่าเป็น4
เมื่อprotocol_name
เป็นMQIsdp
ค่าเป็น3
clean_session
: เซสชั่นที่ดูแล้ว ค่าเริ่มต้นคือtrue
การตั้งค่าเป็นfalse
จะเป็นการรับข้อมูลการตั้งค่า QoS 1 และ QoS 2 ของข้อความแบบออฟไลน์reconnect_period
: ช่วงเวลาสำหรับการเชื่อมต่อใหม่ ค่าเริ่มต้นคือ1
วินาที ค่า0
แทนการเชื่อมต่อแบบไม่ต้องการconnect_timeout
: ช่วงเวลาสำหรับการเชื่อมต่อ mqtt ค่าเริ่มต้นคือ30
วินาทีusername
: ชื่อผู้ใช้ ตัวเลือกpassword
: รหัสผ่าน ตัวเลือกwill
: ข้อความอวิโฆษณีเมื่อไคลเอ็นต์ตัดการเชื่อมต่อ โฆษณาฮิ่งะที่เซิร์ฟเวอร์จะส่งข้อความอวิโฆษณีให้ไคลเอ็นต์อื่น ๆ รูปแบบดังนี้:topic
: หัวข้อcontent
: เนื้อหาqos
: ระดับQoS
retain
: ติดสัญลัฏแปลงไปเก็บ
resubscribe
: เมื่อการเชื่อมต่อกับสิ่งที่ผิดพลาดและเชื่อมต่อใหม่ เช่นในการตั้งค่าใหม่เป็นtrue
bindto
ใช้เพื่อระบุไอพีและพอร์ตท้องถิ่นในการเชื่อมต่อไปยังโบรกเกอร์ ค่าเริ่มต้นคือ ''ssl
ตัวเลือกของ ssl ค่าเริ่มต้นคือfalse
ถ้าตั้งค่าเป็นtrue
จะเชื่อมต่อโดยใช้ ssl ในขณะเดียวกันสนับสนุนข้อมูลของการต่อตาม ssl ที่สามารถกำหนดให้กับใบรับรองภายใน ssl และอื่น ๆ ssl ติดต่อดูข้อมูลที่เกี่ยวกับ https://php.net/manual/en/context.ssl.phpdebug
จะเปิดโหมดดีบักเอารห์ โหมดดีบักเอารห์สามารถเอาออกข้อมูลการสื่อสารระหว่างกับโบรกเกอร์ค่าเริ่มต้นคือfalse
connect()
เชื่อมต่อโบรกเกอร์
publish(String $topic, String $content, [array $options], [callable $callback])
เผยแพร่ข้อความไปยังหัวข้อหนึ่ง
$topic
หัวข้อ$content
ข้อความ$options
อาร์เรย์ตัวเลือก, รวมถึงqos
ระดับQoS
เริ่มต้น0
retain
ติดสัญลัฏแปลงไปเก็บ เริ่มต้นfalse
dup
ซ้ำซ้อนโลโก้เริ่มต้นfalse
$callback
-function (\Exception $exception = null)
(ไม่สนับสนุนการตั้งค่า QoS เป็น 0) เมื่อเกิดข้อผิดพลาดหรือเมื่อเผยแพร่สำเร็จจะกระตุ้น$exception
เป็นอ็อบเจ็กต กฎอื่น ๆ
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
กตติดต่อหรือกระตุ้นฤทธิ์การสมัครบัญชี ในบางเส้น
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) {}
เมื่อไคลเอ็นต์รับข้อความจากไคลเอ็นต์
$topic
หัวข้อที่ไคลเอ็นต์รับมา$content
เนื้อหาข้อความที่ไคลเอ็นต์รับมา$mqtt
ตัวอย่างไคลเอ็นต์ mqtt.
callback onError(\Exception $exception = null)
เมื่อเกิดข้อผิดพลาดการเชื่อมต่อ
callback onClose()
เมื่อการเชื่อมต่อปิดไปตามปกติไม่ว่าจะเป็นไคลเอ็นต์ปิดเองหรือเซิร์ฟเวอร์ปิดจะกระตุ้น onClose