如何在使用MQTT协议链接设置代理参数, 以Azure为例
背景
在一些公司网络层面,会设置一层防火墙来屏蔽一些互联网与公司网络的交互,如果内部应用需要与外部的网络进行链接的时候,就需要公司层面提供一层代理地址。
MQTT 协议
MQTT: Message Queue Telemetry Transport 消息队列遥测传输协议 基于tcp/ip或者其他的无损双向的网络链接.是一种客户机-服务器发布/订阅消息传输协议,广泛的应用于如机器对机器(M2M)和物联网(IoT)环境中的通信的方式中。
MQTT SDK 设置代理
MQTT协议是不支持代理的方式,我们需要按照一种基于 Web 套接字的 MQTT 协议参数,以这种方式来配置代理,可以做到以HTTP层面的代理服务,各类SDK的厂家应该都提供了类似的SDK如Azure MQTT-CONNECT-SDK
使用 MQTTWS NODE 示例
- 引用https-proxy-agent package https-proxy-agent: 负责做http/https层面的消息代理。
- 引用MqttWs package MqttWs: Azure 提供的MQTT SDK
Demo如下:
var HttpsProxyAgent = require('https-proxy-agent')
var Protocol = require('azure-iot-device-mqtt').MqttWs
var Client = require('azure-iot-device').Client
var client = Client.fromConnectionString(connectionString, Protocol)
client.setOptions(
{
mqtt: {
webSocketAgent: new HttpsProxyAgent(`${proxy}`),
},
}
)
复制代码