如何通过服务器隧道浏览器端的mqtt?
浏览器使用这个连接到一个蚊子(websockets模式):
new Paho.MQTT.Client('localhost', 9001, '');
据我所知,这是从浏览器到经纪人的直接连接。 当浏览器位于不同的机器上时,它不能在正常的设置下工作。
在正常的设置nodejs和代理在同一台机器上。 如何通过nodejs路由,所以nodejs可以将连接转发到localhost:9001
? 我不想写很多代码来重新打包消息并重新实现不同的订阅API。
localhost
是一个特殊情况下的主机名,指的是一些代码正在运行的机器。
假设您要连接的代理位于托pipe网页的同一台计算机上,则可以使用location
variables来获取所需的信息。
var client = new Paho.MQTT.Client(location.hostname, 9001, '');
假设你正在代理webapp,那么websockets也可以在同一个端口上代理,
var client = new Paho.MQTT.Client(location.hostname, parseInt(location.port), '');
代理mqtt(使用nginx):
location /mqtt { proxy_pass http://127.0.0.1:9001/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
你可以打开另一个端口,然后build立一个SSH隧道(即SSH隧道MQTT数据)。 这样做的好处是,它可以让你暴露或不暴露这个端口到互联网轻松和安全(encryption)。
本教程介绍了如何做到这一点。 显然,由于MQTT数据是通过SSH(通过SSH隧道)传输的,因此它是100%encryption的,因此是安全的。 当然,你也可以使用RSA密钥(确保SSH连接非常安全),然后编写一个简单的BASH脚本来自动执行所有这个过程。 教程链接: SSH隧道MQTT