如何使用 Bottle 和 MQTT 获取全双工 websocket

How to get full duplex websocket with Bottle and MQTT

我正在尝试在使用 MQTT 进行消息传递的服务器应用程序和我想实时查看消息并将消息发送回服务器端应用程序的网页之间建立 "communication line" .

我在服务器上使用 mosquitto、Bottle 和 gevent,我希望尽可能简单。使用 gevent 我设法在 greenlet 中接收 MQTT 消息,将它们放入队列中并将消息发送到 websocket 过程中的网页,如下所示:

while True:
    mqt = queue.get(True)
    ws.send(mqt)

我也可以像这样(也通过队列)将消息从网页发送回服务器和 MQTT:

while True: 
    msg = ws.receive()
    queue2.put(msg)

但是我希望这两个循环在同一个 websocket 上同时工作。有什么办法可以将它们结合起来吗?例如接收有超时吗?我想我可以使用两个单独的 websockets,但如果我只能用一个就太浪费了。

为什么不直接使用 MQTT over Websockets 将消息传送到页面?有许多支持 Websockets 的经纪人和 paho JavaScript 客户端允许订阅和发布消息