在 v1.1.4 版本中,优化了重连的逻辑,增加了reconnect_delay
配置参数,让用户自己设置重连的延时时间。
之前的版本为固定的3s
,现在默认值为3s
,可以自行设置
use Simps\MQTT\Client; use Swoole\Coroutine; Coroutine\run(function () { $config = [ 'host' => '127.0.0.1', 'port' => 1883, 'user_name' => '', 'password' => '', 'client_id' => \Simps\MQTT\Client::genClientID(), 'keep_alive' => 10, 'reconnect_delay' => 5, ]; $swooleConfig = [ 'open_mqtt_protocol' => true, 'package_max_length' => 2 * 1024 * 1024, 'connect_timeout' => 1.0, ]; $client = new Client($config, $swooleConfig); });
优化了 connect 和 publish 的逻辑,增加了一些限制:
- 在 MQTT 的协议中是不支持 QoS 大于 3 的,MQTT5 中会返回相应的错误码
0x9B
表示不支持的 QoS,但是在 MQTT3 中就没有对应响应,通过抓包会发现其实是一直在重连的
include __DIR__ . '/examples/bootstrap.php'; use Simps\MQTT\Client; use Swoole\Coroutine; Coroutine\run(function () { $client = new Client(getTestConnectConfig(false), SWOOLE_MQTT_CONFIG); $will = [ 'topic' => 'simps-mqtt/user001/update', 'qos' => 3, 'message' => 'byebye', ]; $res = $client->connect(false, $will); var_dump($res); });
所以直接限制在 MQTT3 设置大于 QoS2 的等级
PHP Fatal error: Uncaught Simps\MQTT\Exception\ProtocolException: QoS 3 not supported
2.同样的,在 MQTT5 中 publish 可以通过topic_alias
来进行发布,此时的topic
可以为空,但是 MQTT3 中没有topic_alias
的功能,所以就不支持发布topic
为空的消息
include __DIR__ . '/examples/bootstrap.php'; use Simps\MQTT\Client; use Swoole\Coroutine; Coroutine\run(function () { $client = new Client(getTestConnectConfig(false), SWOOLE_MQTT_CONFIG); $client->connect(); var_dump($client->publish('', 'hello')); }); PHP Fatal error: Uncaught Simps\MQTT\Exception\ProtocolException: Protocol Error, Topic canno