workerman/mqtt
MQTT là một giao thức truyền tải tin nhắn theo mô hình xuất bản / đăng ký dựa trên kiến trúc client-server, đã trở thành một phần quan trọng của Internet of Things (IoT). Ý tưởng thiết kế của nó là nhẹ, mở, đơn giản và tiêu chuẩn, dễ dàng để triển khai. Những đặc điểm này khiến nó trở thành sự lựa chọn tốt cho nhiều tình huống, đặc biệt là trong các môi trường bị hạn chế như giao tiếp máy với máy (M2M) và môi trường IoT.
workerman\mqtt là một thư viện khách hàng MQTT bất đồng bộ dựa trên workerman, có thể được sử dụng để nhận hoặc gửi tin nhắn theo giao thức mqtt. Hỗ trợ QoS 0, QoS 1, QoS 2. Hỗ trợ các phiên bản MQTT 3.1 3.1.1 5.
Địa chỉ dự án
https://github.com/walkor/mqtt
Cài đặt
composer require workerman/mqtt
Hỗ trợ
- MQTT
- MQTT5
- MQTT qua websocket
Ví dụ
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();
Chạy lệnh php subscribe.php start để khởi động.
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();
Chạy lệnh php publish.php start để khởi động.
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])
Tạo một phiên bản khách hàng mqtt.
-
$addressđịa chỉ máy chủ mqtt, định dạng giống như 'mqtt://test.mosquitto.org:1883'. -
$optionsmảng tùy chọn của khách hàng, có thể đặt các tùy chọn sau:keepalive: Khoảng thời gian giữa các trái tim mà khách hàng gửi đến máy chủ, mặc định là 50 giây, đặt thành 0 có nghĩa là không bật trái timclient_id: id của khách hàng, nếu không đặt sẽ mặc định là"workerman-mqtt-client-".mt_rand()protocol_name: Tên giao thức,MQTT(phiên bản 3.1.1) hoặcMQIsdp(phiên bản 3.1), mặc định làMQTTprotocol_level: Cấp độ giao thức, giá trị là4khiprotocol_namelàMQTT, giá trị là3khiprotocol_namelàMQIsdpclean_session: Xóa phiên, mặc định làtrue. Đặt thànhfalsecó thể nhận được tin nhắn ngoại tuyến choQoS 1vàQoS 2reconnect_period: Khoảng thời gian kết nối lại, mặc định là1giây,0có nghĩa là không kết nối lạiconnect_timeout: Thời gian kết nối mqtt hết thời gian, mặc định là30giâyusername: Tên người dùng, tùy chọnpassword: Mật khẩu, tùy chọnwill: Tin nhắn di sản, khi khách hàng ngắt kết nối, Broker sẽ tự động gửi tin nhắn di sản cho các khách hàng khác. Định dạng:topic: Chủ đềcontent: Nội dungqos: Cấp độQoSretain: Dấu đánh dấuretain
resubscribe: Khi kết nối bị ngắt một cách bất thường và kết nối lại, có nên đăng ký lại các chủ đề trước đó hay không, mặc định là truebindto: Dùng để chỉ định địa chỉ IP và cổng nào sẽ được kết nối đến Broker, giá trị mặc định là ''ssl: Tùy chọn ssl, mặc định làfalse, nếu đặt thànhtrue, sẽ kết nối dưới dạng ssl. Cũng hỗ trợ truyền vào mảng ngữ cảnh ssl để cấu hình chứng chỉ cục bộ, ngữ cảnh ssl tham khảo tại https://php.net/manual/en/context.ssl.phpdebug: Có bật chế độ gỡ lỗi hay không, chế độ gỡ lỗi có thể xuất ra thông tin chi tiết về giao tiếp với Broker, mặc định làfalseuri: Địa chỉ uri mqtt qua websocket, thường là/mqtt
connect()
Kết nối với Broker
publish(String $topic, String $content, [array $options], [callable $callback])
Công bố một tin nhắn đến một chủ đề nào đó
$topicChủ đề$contentTin nhắn$optionsMảng tùy chọn, bao gồmqosCấp độQoS, mặc định0retainDấu đánh dấu retain, mặc địnhfalsedupCờ phát lại, mặc địnhfalse
$callback-function (\Exception $exception = null)(không hỗ trợ cài đặt này khi QoS là 0) được kích hoạt khi xảy ra lỗi hoặc công bố thành công,$exceptionlà đối tượng ngoại lệ, khi không có lỗi xảy ra thì$exceptionlànull, tương tự cho các trường hợp khác.
subscribe(mixed $topic, [array $options], [callable $callback])
Đăng ký một chủ đề hoặc nhiều chủ đề
$topiclà một chuỗi (đăng ký một chủ đề) hoặc mảng (đăng ký nhiều chủ đề),
khi đăng ký nhiều chủ đề,$topiclà mảng với các chủ đề là key vàQoSlà giá trị, ví dụarray('topic1'=> 0, 'topic2'=> 1)$optionsMảng tùy chọn đăng ký, có các thiết lập sau:qosCấp độQoS, mặc định0
$callback-function (\Exception $exception = null, array $granted = [])
Hàm gọi lại, được kích hoạt khi đăng ký thành công hoặc có lỗi xảy raexceptionĐối tượng ngoại lệ, khi không có lỗi xảy ra thì lànull, tương tự như trêngrantedMảng kết quả đăng ký, tương tựarray('topic' => 'qos', 'topic' => 'qos')trong đó:topiclà chủ đề đã đăng kýqosCấp độQoSmà Broker chấp nhận
unsubscribe(mixed $topic, [callable $callback])
Hủy đăng ký
$topiclà một chuỗi hoặc mảng chuỗi, giống nhưarray('topic1', 'topic2')$callback-function (\Exception $e = null), hàm gọi lại được kích hoạt khi thành công hoặc thất bại
disconnect()
Ngắt kết nối bình thường với Broker, gói tin DISCONNECT sẽ được gửi đến Broker.
close()
Ngắt kết nối một cách cưỡng bức với Broker, sẽ không gửi gói tin DISCONNECT đến Broker.
callback onConnect(Client $mqtt)
Khi kết nối với Broker được thiết lập hoàn tất thì được kích hoạt. Lúc này đã nhận được gói tin CONNACK từ Broker.
callback onMessage(String $topic, String $content, Client $mqtt)
function (topic, message, packet) {}
Khi khách hàng nhận được gói tin Publish thì được kích hoạt
$topicChủ đề đã nhận$contentNội dung tin nhắn đã nhận$mqttPhiên bản khách hàng mqtt.
callback onError(\Exception $exception = null)
Khi có một lỗi xảy ra trong kết nối thì được kích hoạt
callback onClose()
Khi kết nối bị đóng, bất kể đó là do khách hàng chủ động đóng hay máy chủ đóng, sẽ kích hoạt onClose