workerman/mqtt
MQTT là một giao thức truyền tin nhắn theo mô hình phát hành/đăng ký giữa máy khách và máy chủ, đã trở thành một phần quan trọng của Internet of Things. Thiết kế của nó nhẹ nhàng, mở, đơn giản, chuẩn mực và dễ triển khai. Những đặc điểm này khiến nó trở thành lựa chọn tốt cho nhiều tình huống, đặc biệt là đối với môi trường có hạn như việc giao tiếp giữa máy và máy (M2M) cũng như môi trường Internet of Things (IoT).
workerman\mqtt là một thư viện người dùng mqtt không đồ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
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 dòng lệnh php subscribe.php start
để bắt đầu
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 dòng lệnh php publish.php start
để bắt đầu.
workerman\mqtt\Client interface
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])
Tạo một phiên bản người dùng mqtt.
-
$address
Địa chỉ máy chủ mqtt, định dạng tương tự 'mqtt://test.mosquitto.org:1883'. -
$options
Mảng tùy chọn cho người dùng, có thể thiết lập các tùy chọn sau:keepalive
: Thời gian gửi tin nhắn mạch hở từ máy khách đến máy chủ, mặc định là 50 giây, thiết lập thành 0 để tắt tính năng gửi tin nhắn mạch hởclient_id
: ID máy khách, nếu không thiết lập, 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àMQTT
protocol_level
: Mức giao thức, nếuprotocol_name
làMQTT
, giá trị là4
, nếuprotocol_name
làMQIsdp
, giá trị là3
clean_session
: Phiên làm sạch, mặc định làtrue
. Thiết lập thànhfalse
để nhận tin nhắn ngoại tuyến cấpQoS 1
vàQoS 2
reconnect_period
: Khoảng thời gian tái kết nối, mặc định là1
giây,0
để không kết nối lạiconnect_timeout
: Thời gian kết nối mqtt vượt quá thời gian chờ, mặc định là30
giâyusername
: Tên người dùng, tùy chọnpassword
: Mật khẩu, tùy chọnwill
: Tin nhắn lưu lại, khi máy khách ngắt kết nối, Broker sẽ tự động gửi tin nhắn lưu lại đến các máy khách khác. Định dạng:topic
: Chủ đềcontent
: Nội dungqos
: CấpQoS
retain
: Cờretain
resubscribe
: Khi kết nối bị ngắt kết nối và kết nối lại, liệu có đăng ký lại chủ đề trước đó không, mặc định là truebindto
Dùng để chỉ định kết nối từ IP và cổng nào của máy chủ tới Broker, giá trị mặc định là ''ssl
Tùy chọn ssl, mặc định làfalse
, nếu thiết lập thànhtrue
, kết nối bằng ssl. Đồng thời hỗ trợ truyền mảng ngữ cảnh ssl, dùng để thiết lập chứng chỉ cục bộ, v.v., tham khảo ngữ cảnh ssl 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ể hiển thị thông tin chi tiết về giao tiếp với Broker, mặc định làfalse
connect()
Kết nối với Broker
publish(String $topic, String $content, [array $options], [callable $callback])
Đăng một tin nhắn tới một chủ đề nào đó
$topic
Chủ đề$content
Tin nhắn$options
Mảng tùy chọn, bao gồmqos
cấpQoS
, mặc định là0
retain
cờ lưu lại, mặc định làfalse
dup
Cờ gửi lại, mặc định làfalse
$callback
-function (\Exception $exception = null)
(Không hỗ trợ khi cấpQoS
là 0), khi có lỗi xảy ra hoặc đăng tin thành công,$exception
là đối tượng ngoại lệ, khi không có lỗi xảy ra,$exception
lànull
, tương tự như vậy.
subscribe(mixed $topic, [array $options], [callable $callback])
Đăng ký một chủ đề hoặc nhiều chủ đề
$topic
là một chuỗi (đăng ký một chủ đề) hoặc một mảng (đăng ký nhiều chủ đề),
khi đăng ký nhiều chủ đề,$topic
là mảng chủ đề làm khóa và giá trị là cấpQoS
, ví dụ như array('topic1'=> 0, 'topic2'=> 1)$options
Mảng tùy chọn đăng ký, bao gồm các thiết lập sau:qos
cấpQoS
, mặc định là0
$callback
-function (\Exception $exception = null, array $granted = [])
Hàm gọi lại, 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 lànull
, tương tự như vậy.granted
Mảng kết quả đăng ký, tương tự nhưarray('topic' => 'qos', 'topic' => 'qos')
, trong đó:topic
là chủ đề đăng kýqos
MứcQoS
mà Broker chấp nhận
unsubscribe(mixed $topic, [callable $callback])
Hủy đăng ký
$topic
là một chuỗi hoặc mảng chuỗi, tương tự nhưarray('topic1', 'topic2')
$callback
-function (\Exception $e = null)
, hàm gọi lại khi thành công hoặc thất bại
disconnect()
Ngắt kết nối với Broker một cách bình thường, gửi DISCONNECT
bản tin đến cho Broker.
close()
Ngắt kết nối mạnh với Broker, sẽ không gửi DISCONNECT
bản tin đến cho Broker.
callback onConnect(Client $mqtt)
Khi kết nối với Broker hoàn tất, sẽ gọi hàm này. Lúc này đã nhận được bản tin CONNACK
từ Broker.
callback onMessage(String $topic, String $content, Client $mqtt)
function (topic, message, packet) {}
Khi máy khách nhận được bản tin Publish.
$topic
Chủ đề nhận được$content
Nội dung tin nhắn nhận được$mqtt
Phiên bản máy khách mqtt.
callback onError(\Exception $exception = null)
Khi có lỗi xảy ra trong quá trình kết nối
callback onClose()
Khi kết nối đóng, dù là máy khách đóng kết nối tự ý hoặc máy chủ đóng kết nối, hàm này đều sẽ được gọi.