【问题标题】:Not receiving mqtt message on mobile web-client via paho mqttws31.js未通过 paho mqttws31.js 在移动 Web 客户端上接收 mqtt 消息
【发布时间】:2014-09-11 19:07:21
【问题描述】:

我使用 paho mqttws31.js (http://www.eclipse.org/paho/clients/js/) 通过 web 应用程序中的 websockets 接收 mqtt 消息。在具有不同浏览器(chromeium、firefox ...)的电脑上,一切都非常顺利,没有任何错误。但是,当我在移动设备(如平板电脑或智能手机)上使用完全相同的源代码时,我不会收到保留的消息。当我连接到代理时,我在 onSuccess 回调中订阅了一些保留的主题。但我大部分时间都没有收到保留的消息。 如前所述,这只发生在移动设备上。

提前致谢。

【问题讨论】:

  • 不,这是指 java 而不是 javascript(差别很大)+ 两次提到它适用于非移动浏览器。
  • 我查看了 mosquitto 并注意到,只要 webclient 订阅了保留的主题,就会发送保留的消息:1410481320: Sending PUBLISH to clientId-NCrfWsdfTwn (d0, q0, r0, m0, 'current_topics', ... (3144 bytes)) 但这条消息永远无法到达移动设备。
  • 您使用的是什么代理/websockets 和版本?
  • Mosquitto 1.3.1 与 lighttpd 一起用于 websocket 支持。

标签: javascript web-applications retain mqtt paho


【解决方案1】:

所以对于那些不想阅读所有 cmets 的人来说。 这似乎是 mosquitto 与 lighttpd 结合使用的错误,作为 websocket-provider。

你可以做什么:

使用: (简单的方法)HiveMQ(http://www.hivemq.com/mqtt-over-websockets-with-hivemq/)它天生就支持websockets,所以安装很容易,但它不是开源的,因为它是用Java编写的,我不确定它是否和mosquitto一样快,但我绝对不不知道。

或者:花点时间编译最新版本的mosquitto(1.4),它本身也支持websockets:http://jpmens.net/2014/07/03/the-mosquitto-mqtt-broker-gets-websockets-support/(但目前还没有发布)这个版本似乎也解决了这个问题。安装最新的蚊子:http://goochgooch.wordpress.com/2014/08/01/building-mosquitto-1-4/

Edit0:我检查了速度,必须说带有 websockets 的 HiveMQ 比带有 websockets 的 mosquitto 快得多。当我通过 websockets 连接时,我已经注意到了,因为延迟很小。然后我向浏览器发送了 1000 个值,它们再次返回给订阅客户端。 Hive 似乎比 mosquitto 快 3 倍(我必须保证这可能不是一个可靠的实验)。所以对我来说,我的决定是显而易见的,只要 mosquitto 不能与 lighttpd-websocket 支持一起正常工作,我就会继续使用 hive。很高兴听到一些意见。

Edit1:我进退两难:通过 lighttpd 的 Websocketsupport 非常快,比新的 mosquitto websocket 支持快得多,而且比 hivemq 快。当我在树莓上运行 mqtt-broker 时,我依赖于良好的性能,因此所讨论的 Edit0 解决方案都不适合我。但是如果我使用 lighttpd 我会遇到最初描述的问题。

有人有更方便的解决方案吗?

感谢您的帮助。

【讨论】:

  • 正如我上面所说,我确定这是 lighttpd+mod_websockets 中的一个错误。你用的是什么版本的?
  • 另外,您能否详细说明您是如何测量速度的?
  • 我正在使用 lighttpd 1.4 和 mod_websocket 3.5 这是一个错误的组合吗?如果是这样,你能告诉我哪些版本适合吗?我通过 python 脚本测量的往返时间来测量速度。它通过树莓派上的 mosquitto 代理向订阅的 Web 客户端发送任意 256 个字节。 Web 客户端立即将数据包发送回另一个客户端。
  • 谁能提出其他解决方案?
  • 关于 mosquitto websocket 的性能,这是 mosquitto 的轮询循环中的一个已知问题。见问题 147 github.com/eclipse/mosquitto/issues/147。你可以等到 Roger 发布带有新事件循环的 1.6。或将 libwebsocket fd 添加到 WSAPoll() 的 fdlist 或将其超时默认值 100 毫秒修改为 30 毫秒或 10 毫秒。如果您的测试显示蚊子和蜂巢之间有 3 倍的差异,那么它们很可能在今天或不久之后就接近了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
相关资源
最近更新 更多