<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 基于php-mqtt/client依賴 > php-mqtt/client是根據 MIT 許可證許可的開源軟件 ##### 安裝 該軟件包在[packagist.org](https://packagist.org/)上下載,可以使用以下命令安裝:[composer](https://so.csdn.net/so/search?q=composer&spm=1001.2101.3001.7020) ~~~linux composer require php-mqtt/client ~~~ > 該軟件包需要 PHP 版本 7.4 或更高版本。 ##### 發布 使用 QoS 0 的非常基本的發布示例只需要三個步驟:連接、發布和斷開連接 ~~~php $server = 'some-broker.example.com';//連接地址 $port = 1883;//連接端口 $clientId = 'test-publisher';//客戶端ID,可隨意填寫,也可使用rand函數生成隨機的 $mqtt = new \PhpMqtt\Client\MqttClient($server, $port, $clientId); $mqtt->connect(); $mqtt->publish('php-mqtt/client/test', 'Hello World!', 0); $mqtt->disconnect(); ~~~ > 另外注意,大多數方法都可能引發異常。為簡潔起見,上面的示例未添加任何的異常處理。 ##### 訂閱 訂閱比發布稍微復雜一些,因為它需要運行一個事件循環,該循環讀取、解析和處理來自代理的消息 ~~~php $server = 'some-broker.example.com';//連接地址 $port = 1883;//連接端口 $clientId = 'test-subscriber';//客戶端ID,可隨意填寫,也可使用rand函數生成隨機的 $mqtt = new \PhpMqtt\Client\MqttClient($server, $port, $clientId); $mqtt->connect(); $mqtt->subscribe('php-mqtt/client/test', function ($topic, $message) { echo sprintf("Received message on topic [%s]: %s\n", $topic, $message); }, 0); $mqtt->loop(true); $mqtt->disconnect(); ~~~ 當環路處于活動狀態時,您可以使用它向環路發送中斷信號。這將在循環開始下一次迭代之前終止循環。例如,您可以使用以下方法調用此方法: ~~~php $mqtt->interrupt()pcntl_signal(SIGINT, $handler) ~~~ 如下: ~~~php pcntl_async_signals(true); $clientId = 'test-subscriber'; $mqtt = new \PhpMqtt\Client\MqttClient($server, $port, $clientId); pcntl_signal(SIGINT, function (int $signal, $info) use ($mqtt) { $mqtt->interrupt(); }); $mqtt->connect(); $mqtt->subscribe('php-mqtt/client/test', function ($topic, $message) { echo sprintf("Received message on topic [%s]: %s\n", $topic, $message); }, 0); $mqtt->loop(true); $mqtt->disconnect(); ~~~ ##### 客戶端設置 如上面的示例所示,將服務器、端口和客戶端 ID 作為第一、第二和第三個參數。作為第四個參數,可以傳遞協議級別。目前支持的是 MQTT v3.1,可作為常量 。第五個參數允許傳遞存儲庫(目前,默認情況下只有一個可用)。最后,記錄器可以作為第六個參數傳遞。如果未給出任何記錄器,則改用空記錄器。 > MqttClientMqttClient::MQTT\_3\_1MemoryRepository 例如: ~~~php $mqtt = new \PhpMqtt\Client\MqttClient( $server, $port, $clientId, \PhpMqtt\Client\MqttClient::MQTT_3_1, new \PhpMqtt\Client\Repositories\MemoryRepository(), new Logger() ); ~~~ > 必須實現 .LoggerPsr\\Log\\LoggerInterface ##### 連接設置 它的方法采用兩個可選參數: > connect() MqttClient 1. 實例 Connection Settings 2. 指示是否應請求干凈會話的標志(隨機客戶端 ID 隱式執行此操作)boolean 例如: ~~~php $mqtt = new \PhpMqtt\Client\MqttClient($server, $port, $clientId); $connectionSettings = (new \PhpMqtt\Client\ConnectionSettings) ->setConnectTimeout(3) ->setUseTls(true) ->setTlsSelfSignedAllowed(true); $mqtt->connect($connectionSettings, true); ~~~ 該類通過流暢的界面提供了一些設置。類型本身是不可變的,并且將為每個添加的選項創建一個新實例。這還可以防止在建立連接后更改連接設置。 > ConnectionSettings ConnectionSettings 以下是選項的完整列表及其各自的默認值: ~~~php $connectionSettings = (new \PhpMqtt\Client\ConnectionSettings) // 連接到代理時用于身份驗證的用戶名。 ->setUsername(null) // 連接到代理時用于身份驗證的密碼。 ->setPassword(null) // 連接超時定義了客戶端嘗試與代理建立套接字連接的最大秒數。 // 該值不能小于 1 秒。 ->setConnectTimeout(60) // 套接字超時是套接字連接的最大空閑時間(以秒為單位)。 // 如果在給定的秒數內沒有讀取或發送數據,則套接字將關閉。 // 該值不能小于 1 秒。 ->setSocketTimeout(5) // 重新發送超時是客戶端在發送未確認消息的副本之前等待的秒數。 // 該值不能小于 1 秒。 ->setResendTimeout(10) // 保持活動間隔是客戶端在向代理發送保持活動信號(ping)之前將等待而不 //發送消息的秒數。 該值不能小于 1 秒,也不能大于 65535 秒。 一個合理 //的值是 10 秒(默認值)。 ->setKeepAliveInterval(10) // 如果客戶端突然斷開連接時代理應該以客戶端的名義發布最后的遺囑消息, // 則此設置定義將發布消息的主題。 僅當同時配置了此設置和最后遺囑消息 // 時,才會發布最后遺囑消息。 ->setLastWillTopic(null) // 如果客戶端突然斷開連接時代理應該以客戶端的名義發布最后的遺囑消息, // 此設置定義將要發布的消息。 僅當配置了此設置以及最后遺囑主題時, // 才會發布遺囑消息。 ->setLastWillMessage(null) // 如果被觸發,客戶端的最后一條消息將被發布的服務質量級別。 ->setLastWillQualityOfService(0) // 此標志確定是否保留客戶端的最后一條消息(如果它被觸發)。 使用此設置 // 可以方便地通過在最后遺囑中發布保留的離線狀態和在線狀態作為連接時的 // 第一條消息來發出客戶端離線的信號。 ->setRetainLastWill(false) // 此標志確定是否應將 TLS 用于連接。 用于連接代理的端口必須支持 TLS // 連接。 ->setUseTls(false) // This flag determines if the peer certificate is verified, if TLS is used. ->setTlsVerifyPeer(true) // 此標志確定是否驗證了對等方名稱,是否使用了 TLS。 ->setTlsVerifyPeerName(true) // 此標志確定是否應接受對等方的自簽名證書。 將此設置為 TRUE 意味著存在 // 安全風險,應避免用于生產場景和公共服務。 ->setTlsSelfSignedAllowed(false) // 如果使用 TLS,則用于驗證對等證書的證書頒發機構證書的路徑。 ->setTlsCertificateAuthorityFile(null) // 如果使用 TLS,則包含用于驗證對等證書的證書頒發機構證書的目錄的路徑。 ->setTlsCertificateAuthorityPath(null) // 用于身份驗證的客戶端證書文件的路徑(如果使用 TLS)。客戶端證書必須 // 是 PEM 編碼的。 它可以選擇包含頒發者的證書鏈。 ->setTlsClientCertificateFile(null) // 用于身份驗證的客戶端證書密鑰文件的路徑(如果使用 TLS)。 此選項還需 // 要使用 ConnectionSettings::setTlsClientCertificateFile()。 ->setTlsClientCertificateKeyFile(null) // 用于解密客戶端證書私鑰的密碼短語,如果使用 TLS,則反過來用于身份驗 // 證。 此選項還需要使用ConnectionSettings::setTlsClientCertificateFile() // 和 ConnectionSettings::setTlsClientCertificateKeyFile()。 ->setTlsClientCertificateKeyPassphrase(null); ~~~ ##### 特征 > * 支持的 MQTT 版本 > v3(只是不要使用用戶名和密碼等v3.1功能) > 版本3.1 > 版本3.1.1 > 5.0 版 > * 運輸 > TCP(不安全) > TLS(安全,使用證書頒發機構文件驗證對等方) > * 連接 > 最后遺囑 > 郵件保留 > 身份驗證(用戶名和密碼) > TLS 加密連接 > 清理會話(可以設置和發送,但客戶端對 QoS 2 消息沒有持久性) > * 發布 > QoS 級別 0 > QoS 級別 1(限制:跨會話沒有持久狀態) > QoS 級別 2(限制:會話之間沒有持久狀態) > * 訂閱 > QoS 級別 0 > QoS 級別 1 > QoS 級別 2(限制:會話之間沒有持久狀態) > * 支持的消息長度:無限制(沒有強制執行限制,盡管MQTT協議僅支持高達256MB的數據,無論如何都不應該遠程使用) > * 可以記錄(可以傳遞給客戶端)Psr\\Log\\LoggerInterface > * 持久性驅動程序 > 內存中驅動程序 > Redis 驅動程序 ##### 局限性 > QoS 級別高于 0 的消息流不會持久保存,因為缺省實現使用內存中存儲庫來存儲數據。要避免消息流中斷的問題,請使用 clean 會話標志來指示您不關心舊數據。它不僅會指示代理將連接視為新連接(沒有以前的狀態),而且還會重置已注冊的存儲庫。 ##### 開發和測試 ###### 證書 若要運行測試(尤其是 TLS 測試),需要創建證書。為此提供了一個命令: ~~~linux sh create-certificates.sh ~~~ 這將在目錄中創建所有必需的證書。相同的腳本也用于持續集成。 ~~~linux .ci/tls/ ~~~ 用于測試的 MQTT 代理 運行測試需要運行 MQTT 代理。運行 MQTT 代理的最簡單方法是通過 Docker: ~~~linux docker run --rm -it -p 1883:1883 -p 8883:8883 -p 8884:8884 -v $(pwd)/.ci/tls:/mosquitto-certs -v $(pwd)/.ci/mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto:1.6 ~~~ 從項目目錄運行時,這將生成一個 Mosquitto MQTT 代理,該代理使用生成的 TLS 證書和自定義配置進行配置。 如果您打算運行不同的代理或使用不同的方法,或者改用公共代理,則需要相應地調整中定義的環境變量。 > phpunit.xml
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看