Skip to content

Serverless 连接指引 ​

本页为您介绍了连接 Serverless 部署所使用的协议并提供了连接问题的排查指南。

Serverless 连接 Q&A ​

什么是 TCP MQTT 和 WebSocket 连接? ​

标准的 MQTT 是基于 TCP/IP 协议栈构建的异步通信消息协议,是一种轻量级的发布、订阅信息传输协议。可以在不可靠的网络环境中进行扩展,适用于设备硬件存储空间或网络带宽有限的场景。

WebSocket 协议是基于 TCP 的一种新的网络协议,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变得更加简单。这里 WebSocket 更准确的是指先使用 WebSocket 建立连接,然后在 WebSocket 通道上使用 MQTT 协议进行通信,即 MQTT over WebSocket。主要是用于浏览器环境的连接。

标准的 MQTT 和 WebSocket 都是不加密的。会有一定的安全风险。

什么是 TLS/SSL 的 MQTT 和 WebSocket 连接? ​

在 MQTT 或 WebSocket 协议通信的基础上,添加 TLS/SSL 加密,确保通信的安全,不易被窃听和篡改。MQTT TLS/SSL 端口号为 8883,对应 mqtts 协议; WebSocket TLS/SSL 端口号为 8084,对应 wss 协议。

Serverless 为什么只支持 TLS/SSL 的 MQTT 和 WebSocket 连接? ​

Serverless 基于 EMQX 多租户架构,多个用户共享一个 EMQX 集群。使用 TLS 加密的 MQTT 和 WebSocket 连接可以提供对数据的安全保障和传输的可靠性。

如何编写客户端 TLS/SSL 代码? ​

您可以查看示例代码(TLS 相关示例代码)来编写客户端的代码。

Python
Java
GO
Node.js
ESP 32
ESP 8266
Android
swift

CA 文件

Serverless 使用 EMQX 提供并且维护服务端 CA 的单向 TLS 验证。某些客户端需要提供服务端 CA 进行校验,请在此下载。

连接问题排查指南 ​

如果您无法连接 Serverless 部署,请根据以下步骤进行问题排查。

  1. 核对连接地址,确保您使用的是 EMQX Serverless 提供的正确域名进行连接。请注意,不支持通过 CNAME 将 EMQX Cloud 的域名指向您自己的域名,如果您的应用场景需要使用非加密的 TCP 端口连接,请使用我们的专有版部署。

  2. 确认连接端口,EMQX Serverless 仅支持通过 MQTT over TLS (端口 8883) 和 Websocket over TLS (端口 8084) 进行连接,请注意,不支持通过 1883 和 8083 端口连接到部署。如果您的应用场景需要使用非加密的 TCP 端口连接,请使用我们的专有版部署。

  3. 测试网络连通性,使用 telnet 命令来测试您的服务器与 EMQX Serverless之间的网络连通性,例如:telnet broker.emqx.io 8883。(请替换为您的实际部署地址)

  4. 验证认证信息, EMQX Cloud 不支持匿名认证。请确认您已经在 EMQX Cloud 控制台中设置了 MQTT 客户端的用户名和密码,并在客户端连接时进行了正确的配置。

  5. 检查 SNI (Server Name Indication) 配置,客户端连接时必须提供正确的 SNI 信息。如果 SNI 配置错误或未在连接请求中包含 SNI 信息,EMQX Cloud 将拒绝连接,并返回错误代码 -5。

  6. 使用 MQTTX 客户端进行测试,我们推荐使用 MQTTX 作为 MQTT 客户端测试工具,它是一个免费且易于使用的跨平台 MQTT 5.0 客户端。您可以通过它来验证是否是客户端代码的问题导致无法连接。详细的使用说明,请参见:MQTTX 使用文档。

通过工单获得我们的帮助 ​

如果以上步骤都确认无误但问题仍然存在,请通过工单系统提交帮助请求,并提供以下详细信息,以便我们更快地为您解决问题:

- 部署的名称和 ID(可在控制台的"部署管理"页面找到)

- 部署类型(例如 Serverless、专有版等)

- 客户端的具体类型和版本号

- 客户端连接示例代码(请提供您使用的编程语言,例如 Python、JavaScript 等,以及相关的连接代码,确保敏感信息已经脱敏)

- 客户端的错误日志或具体的报错信息(请尽可能提供详细的错误描述或截图)