我需要了解 HTTP 和 MQTT 连接之间的区别。
我想在不使用端口转发的情况下将数据从服务器发送到客户端。
如果我明白,使用 HTTP 是不可能的;因此,使用 HTTP 客户端将连接到服务器并询问(即 GET 或 POST 请求)并从中接收数据。
但是使用 MQTT 可能相反吗?我的意思是服务器可以在没有收到请求的情况下向客户端发送数据?仅仅因为客户端订阅了代理主题?
我需要了解 HTTP 和 MQTT 连接之间的区别。
我想在不使用端口转发的情况下将数据从服务器发送到客户端。
如果我明白,使用 HTTP 是不可能的;因此,使用 HTTP 客户端将连接到服务器并询问(即 GET 或 POST 请求)并从中接收数据。
但是使用 MQTT 可能相反吗?我的意思是服务器可以在没有收到请求的情况下向客户端发送数据?仅仅因为客户端订阅了代理主题?
是的
(我不知道这里还能说什么,你所描述的是真实的)。
HTTP 是一种事务性请求/响应协议:
*是的,我知道您可以设置 Keep-Alive 标头,并且在服务器等待另一个请求时连接将保持打开状态,但它仍然是请求驱动的。
MQTT 是一种发布/订阅协议
该连接在客户端的生命周期内是持久的。因为连接是由客户端发起的(它打开出站连接),所以当客户端位于 NAT 网关之后时,这会起作用。只要 Broker 是公开可用的,那么这一切都可以正常工作。
在您描述的情况下,“服务器”只是另一个连接到 Broker 的客户端,它发布其他客户端订阅的消息。