你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何为单个客户端建立多个会话
本指南介绍如何在单个客户端与事件网格命名空间之间建立多个会话。
先决条件
- 你已创建一个事件网格命名空间。 请参阅快速入门 - 发布和订阅 MQTT 主题以创建命名空间、子资源并在主题上发布/订阅。
多会话支持
若要为每个客户端创建多个会话,请在 CONNECT 数据包的 Username 属性中提供客户端身份验证名称。 然后,可以在 CONNECT 数据包的客户端标识符 (ClientID) 属性中提供会话 ID。
- 如果 CONNECT 数据包中未提供 Username 属性,则无法为客户端创建多个会话。
- ClientID 字段不能为空。
- ClientID 必须在命名空间的所有客户端中唯一
如果某个客户端尝试通过提供其会话名称来接管另一个客户端的活动会话,则其连接请求将被拒绝并出现未授权错误。 例如,如果客户端 B 尝试连接到当时已分配给客户端 A 的会话 123,则客户端 B 的连接请求将被拒绝。
如果客户端在未结束其会话的情况下断开连接,则在该会话过期之前,其他客户端无法使用该会话名称。 例如,如果客户端 A 创建了会话名称为 123 的会话,然后客户端 A 断开连接,则在原始会话过期之前,客户端 B 无法连接到会话 123。
CONNECT 配置。在 MQTT CONNECT 数据包的 Username 字段中包含客户端身份验证名称,该名称表示客户端的标识。 下面是客户端身份验证名称为“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”
可以使用相同的客户端证书凭据对两个会话进行身份验证。