如何為單一用戶端建立多個工作階段
在本指南中,您將瞭解如何為事件方格命名空間的單一用戶端建立多個工作階段。
必要條件
- 您已建立事件方格命名空間。 請參閱本快速入門 - 在 MQTT 主題上發佈和訂閱,以建立命名空間、子資源,以及在主題上發佈/訂閱。
多工作階段支援
若要為每個用戶端建立多個工作階段,請在 CONNECT 封包的 Username 屬性中提供用戶端驗證名稱。 然後,您可以在 CONNECT 封包的用戶端識別碼 (ClientID) 屬性中提供工作階段識別碼。
- 如果在 CONNECT 封包中未提供 Username 屬性,則您無法為用戶端建立多個工作階段。
- ClientID 欄位不能是空的。
- ClientID 在命名空間中的所有用戶端中必須是唯一
如果用戶端嘗試透過呈現其工作階段名稱來接管另一個用戶端的作用中工作階段,則會拒絕其連線要求,並出現未經授權的錯誤。 例如,如果用戶端 B 嘗試連線到當時指派給用戶端 A 的工作階段 123,則用戶端 B 的連線要求就會遭到拒絕。
如果客戶端中斷連線而不結束其工作階段,其他客戶端將無法使用工作階段名稱,直到工作階段到期為止。 例如,如果用戶端 A 建立工作階段名稱為 123 的工作階段,用戶端 A 就會中斷連線,則用戶端 B 在原始工作階段到期之前,無法連線到工作階段 123。
CONNECT 組態在 MQTT CONNECT 封包中,在 [用戶名稱] 欄位中包含用戶端驗證名稱,以表示用戶端的身分識別。 以下是用戶端驗證名稱 "ipv4=127.0.0.1" 的用戶端中繼資料範例。
現在,將用戶端連線到命名空間時,您可以使用 MQTT CONNECT 封包中的用戶識別碼欄位作為工作階段識別碼。
例如,根據用戶端設定,您可以傳送兩個具有相同用戶端欄位值的 CONNECT 封包:
您可以使用 MQTTX 應用程式來查看連線設定範例。
第一次連線封包:
- username: “ipv4=127.0.0.1”
- clientId: “sessionId1”
第二個連線封包:
- username: “ipv4=127.0.0.1”
- clientId: “sessionId2”
您可以使用相同的用戶端憑證認證來驗證這兩個工作階段。