如何通过服务器隧道浏览器端的mqtt?

浏览器使用这个连接到一个蚊子(websockets模式):

new Paho.MQTT.Client('localhost', 9001, ''); 

据我所知,这是从浏览器到经纪人的直接连接。 当浏览器位于不同的机器上时,它不能在正常的设置下工作。

在正常的设置nodejs和代理在同一台机器上。 如何通过nodejs路由,所以nodejs可以将连接转发到localhost:9001 ? 我不想写很多代码来重新打包消息并重新实现不同的订阅API。

localhost是一个特殊情况下的主机名,指的是一些代码正在运行的机器。

假设您要连接的代理位于托pipe网页的同一台计算机上,则可以使用locationvariables来获取所需的信息。

 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