【问题标题】:How do I enable both TCP and web sockets in Mosquitto?如何在 Mosquitto 中同时启用 TCP 和 Web 套接字?
【发布时间】:2018-06-14 20:07:51
【问题描述】:

我使用 Paho 库通过 MQTT 实现消息传递。在我的 mosquitto.conf 文件中,我有以下内容:

listener 1883
protocol websockets

此配置适用于 Web 应用程序。当我尝试使用带有 TCP 的 Android 和 iOS 进行连接时,它给出了错误“连接超时”。当我禁用protocol websockets 行时,它可以在Android 和iOS 上运行,但是网页无法连接。

当我尝试测试 MQTT 服务器 test.mosquitto.org 时,一切正常。

请告诉我,我需要它来处理 Android、iOS 和 Web 应用程序,同时支持 WebSockets 和 TCP 连接。

【问题讨论】:

    标签: sockets tcp mqtt mosquitto


    【解决方案1】:

    你需要定义两个监听器,一个用于mqtt over tcp,一个用于websockets:

    # this will listen for mqtt on tcp
    listener 1883
    
    # this will expect websockets connections
    listener 8080
    protocol websockets
    

    【讨论】:

    • 感谢您的回复。在我的服务器中,8080 未启用。我现在会检查。
    • 8080 只是一个例子,它可以是任何东西。关键是你不能在同一个端口上拥有普通的 mqtt 和 websockets。
    • 当我尝试上述方法时,我收到错误“连接失败:AMQJS0007E 套接字错误:undefined.Retrying”
    • 当我重新启动服务器并尝试时,它现在可以工作了。非常感谢。
    • 在使用这个新配置 (mosquitto -c /etc/mosquitto/mosquitto.conf) 启动代理后,websockets 无需自己构建 mosquitto 即可工作,使用来自 ppa:mosquitto-dev/mosquitto-ppa 的 mosquitto 1.6.2
    【解决方案2】:

    简而言之:

    • 在 web (javascript) 上,您需要 websocket 支持。
    • 在 Android / iOS 上,您可以使用标准 TCP 侦听器。

    Mosquitto,如果您在本地或服务器上运行它,很可能没有 websocket 支持(即使您在配置中提供了它)。 Websocket 支持可以在编译时定义。如果在编译您的版本时未定义它,您将无法获得对它的支持。

    来自Mosquitto broker conf docs“Websockets 支持目前在编译时默认禁用。”

    因此,您需要从源代码构建一个支持 websocket 的 mosquitto 版本。网上有很多资源可以帮助您解决这个问题。

    我已经在this blog post 中写下了我的经验。

    【讨论】:

    • 感谢您的回复。我会调查的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2021-11-26
    • 1970-01-01
    • 2014-02-10
    • 2020-11-22
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多