Не получено сообщение mqtt на мобильном веб-клиенте через paho mqttws31.js

Я использую paho mqttws31.js (http://www.eclipse.org/paho/clients/js/) для получения сообщений mqtt через веб-сокеты в веб-приложении. На ПК с разными браузерами (chromeium, firefox ...) все работает без ошибок. Но когда я использую точно такой же исходный код на мобильных устройствах, таких как планшеты или смартфоны, я не получаю сохраненные сообщения. Я подписываюсь на некоторые сохраненные темы внутри обратного вызова onSuccess при подключении к брокеру. Но большую часть времени я не получаю сохраненное сообщение. Как уже упоминалось, это происходит только на мобильных устройствах.

Заранее спасибо.


person dan kutz    schedule 11.09.2014    source источник
comment
Аналогичный вопрос здесь: stackoverflow.com/questions/25176643/   -  person Dom    schedule 11.09.2014
comment
нет, это относится к java, а не к javascript (большая разница) +, как уже упоминалось дважды, он работает в немобильных браузерах.   -  person dan kutz    schedule 11.09.2014
comment
Я посмотрел на mosquitto и заметил, что как только веб-клиент подписывается на сохраненную тему, отправляется сохраненное сообщение: 1410481320: Отправка PUBLISH на clientId-NCrfWsdfTwn (d0, q0, r0, m0, 'current_topics', .. . (3144 байта)) Но это сообщение так и не доходит до мобильного устройства.   -  person dan kutz    schedule 12.09.2014
comment
Какие брокеры / веб-узлы и версии вы используете?   -  person Matt.    schedule 12.09.2014
comment
Mosquitto 1.3.1 в сочетании с lighttpd для поддержки веб-сайтов.   -  person dan kutz    schedule 12.09.2014
comment
Я просто не могу понять, почему он отлично работает на немобильных устройствах, так что, наверное, это проблема мобильных браузеров?   -  person dan kutz    schedule 12.09.2014
comment
Я видел нечто подобное раньше, можете ли вы загрузить брокера / веб-сокеты с hivemq.com и посмотреть, хорошо ли это работает с вашей настройкой?   -  person Matt.    schedule 13.09.2014
comment
С брокером ульев вроде как работает.   -  person dan kutz    schedule 14.09.2014
comment
У меня была аналогичная проблема с mosquitto и lighttp. Так и не дошел до решения, просто использовал hivemq. Mosquitto 1.4 (еще не выпущен), вы можете скомпилировать его, и он имеет встроенные веб-сокеты.   -  person Matt.    schedule 14.09.2014
comment
Спасибо, я уже нашел это решение, но почему-то я не могу запустить брокера с веб-сокетами: 1410648873: mosquitto версии 1.4 (дата сборки 2014-09-12 15: 45: 30 + 0200), начиная с 1410648873: конфигурация загружена из websocket.conf. 1410648873: Открытие прослушивающего сокета ipv4 на порту 1883. 1410648873: Открытие прослушивающего сокета ipv6 на порту 1883. 1410648873: Ошибка: невозможно создать прослушиватель веб-сокетов на порте 8010.   -  person dan kutz    schedule 14.09.2014
comment
У вас есть что-нибудь еще, работающее на этом порту 8010? netstat -anltp|grep :8010   -  person Matt.    schedule 14.09.2014
comment
Нет, у меня больше ничего не работает. Если я выполняю команду с помощью sudo, я получаю: Ошибка: недопустимый пользователь mosquitto   -  person dan kutz    schedule 14.09.2014
comment
На мой взгляд, это ошибка lighttpd + websockets. Какую версию того и другого вы используете?   -  person ralight    schedule 18.09.2014
comment
О, и попробуйте последнюю ветку 1.4 - возможно, вы столкнулись с bugs.launchpad.net/ москит / + ошибка / 1370111   -  person ralight    schedule 18.09.2014
comment
Я определил http_dir в конфигурации, но, тем не менее, получил ту же ошибку.   -  person dan kutz    schedule 21.09.2014


Ответы (1)


Так что для тех, кто не хочет читать все комментарии. Похоже, это ошибка mosquitto в сочетании с lighttpd в качестве веб-провайдера.

Что ты можешь сделать:

либо используйте: (простой способ) HiveMQ (http://www.hivemq.com/mqtt-over-websockets-with-hivemq/) он поддерживает веб-сокеты по своей сути, поэтому установка выполняется легко, но это не с открытым исходным кодом, и, поскольку он написан на Java, я не уверен, что это так же быстро, как москит, но я точно не знаю.

или: потратьте немного времени на компиляцию новейшей версии (1.4) mosquitto, которая также изначально поддерживает веб-сокеты: http://jpmens.net/2014/07/03/the-mosquitto-mqtt-broker-gets-websockets-support/ (но не выпущен, поэтому far) эта версия, похоже, также решает эту проблему. Установка новейшей версии Mosquitto: http://goochgooch.wordpress.com/2014/08/01/building-mosquitto-1-4/

Edit0: я проверил скорость и должен сказать, что HiveMQ с веб-сокетами намного быстрее, чем mosquitto с веб-сокетами. Я уже заметил это при подключении через веб-сокеты, потому что была небольшая задержка. Затем я отправил 1000 значений в браузер, где они снова были возвращены подписавшемуся клиенту. Улей кажется в 3 раза быстрее, чем москит (я должен сказать, что это не может быть надежным экспериментом). Так что для меня мое решение очевидно, пока mosquitto не работает должным образом вместе с поддержкой lighttpd-websocket, я останусь с hive. Было бы неплохо услышать несколько мнений.

Edit1: У меня дилемма: поддержка веб-сокетов через lighttpd очень быстрая, намного быстрее, чем новая поддержка веб-сокетов mosquitto, и быстрее, чем hivemq. Поскольку я запускаю mqtt-broker на малине, я зависим от хорошей производительности, поэтому ни одно из обсуждаемых решений Edit0 мне не подходит. Но если я использую lighttpd, я сталкиваюсь с первоначально описанной проблемой.

Есть у кого-нибудь более удобное решение?

Спасибо за вашу помощь.

person dan kutz    schedule 21.09.2014
comment
Как я уже сказал выше, я уверен, что это ошибка в lighttpd + mod_websockets. Какую версию их обоих вы используете? - person ralight; 24.09.2014
comment
Кроме того, не могли бы вы подробнее рассказать, как вы измеряли скорость? - person ralight; 24.09.2014
comment
Я использую lighttpd 1.4 с mod_websocket 3.5. Это неправильная комбинация? Если да, не могли бы вы мне сказать, какие версии подходят друг другу? Я измеряю скорость по времени прохождения туда и обратно, измеренному с помощью скрипта Python. Он отправляет произвольные 256 байтов подписавшемуся веб-клиенту через брокера mosquitto на raspberry pi. Веб-клиент немедленно отправляет пакеты обратно другому клиенту. - person dan kutz; 25.09.2014
comment
Кто-нибудь может предложить другое решение? - person dan kutz; 07.11.2014
comment
Что касается производительности веб-сокета mosquitto, это известная проблема в цикле опроса mosquitto. см. проблему 147, github.com/eclipse/mosquitto/issues/147. вы можете дождаться выхода Roger 1.6 с новым циклом событий. или добавьте libwebsocket fd в список файлов WSAPoll() или измените значение тайм-аута по умолчанию, равное 100 мс, на что-то вроде 30 мс или 10 мс. Если ваш тест показал трехкратную разницу между москитами и ульями, вполне возможно, что они близки сегодня или скоро. - person minghua; 26.05.2016