MQTT 与 HTTP 连接 - 服务器到客户端

物联网 MQTT
2021-06-27 10:53:19

我需要了解 HTTP 和 MQTT 连接之间的区别。

我想在不使用端口转发的情况下将数据从服务器发送到客户端。

如果我明白,使用 HTTP 是不可能的;因此,使用 HTTP 客户端将连接到服务器并询问(即 GET 或 POST 请求)并从中接收数据。

但是使用 MQTT 可能相反吗?我的意思是服务器可以在没有收到请求的情况下向客户端发送数据?仅仅因为客户端订阅了代理主题?

1个回答

是的

(我不知道这里还能说什么,你所描述的是真实的)。

HTTP 是一种事务性请求/响应协议:

  • 客户端打开与服务器的连接
  • 客户端发送对特定资源的请求
  • 服务器回复该请求并关闭连接*

*是的,我知道您可以设置 Keep-Alive 标头,并且在服务器等待另一个请求时连接将保持打开状态,但它仍然是请求驱动的。

MQTT 是一种发布/订阅协议

  • 客户端打开与代理的连接
  • 客户端发送一个主题模式的订阅请求(这可以是一个确切的主题或通配符)
  • 第二个客户端(已连接)向代理发布一条新消息,其主题与第一个客户端匹配。
  • 代理检查所有连接客户端的主题模式列表,并将消息传递给所有匹配的客户端。

该连接在客户端的生命周期内是持久的。因为连接是由客户端发起的(它打开出站连接),所以当客户端位于 NAT 网关之后时,这会起作用。只要 Broker 是公开可用的,那么这一切都可以正常工作。

在您描述的情况下,“服务器”只是另一个连接到 Broker 的客户端,它发布其他客户端订阅的消息。