Pull to refresh

Comments 18

Правильно что не стали испольpовать socket.io Так как рано или позно столкнулдись бы с двумя проблемами: 1) пропуск сообщений 2) дублирование сообощений. Подробности здесь https://habr.com/ru/post/469315/
WAMP — к сожалению — также не решает эти вопросы. Пэтому для чатов лучше использовать что-то вроде MQTT.


Кстати, какой брокер использовали — если autobahn — то еще есть у него ограничения по количеству подключенных клиентов одновременно.

Спасибо за ссылку, а реализация брокера у нас полностью своя.)

Ну насколько я помню, autobahn — это только клиент. А роутер — у них Crossbar.io. Это всё на питоне :)
А ещё есть Wiola например :) на nginx+lua или openresty. В общем вариантов много!

В списке на сайте там много чего есть. Даже несколько проектов на erlang которые теоретически могут выдерживать миллионы коннектов. Но увы кроме crossbar и возможно одного брокера на go там все практически нерабочее. В частности и wiola. Во всяком случае если и рабочее то сложно разворачиваемое. Так что вариантов не так много как может показаться по прочтении списка брокеров на сайте протокола

Ммм… А если не секрет — чем Wiola показалась сложна в разворачивании? Это же просто openresty + redis.
yum install openresty redis + копипаст конфига.
А для старта — даже есть докер-образ.


Мне просто, как автору Wiola это будет интересно узнать :)

Вобщем то я ее развернул. Хотя были проболемы с messagepack из за несовместимости уже не помню каких версий библиотек. Если есть Docker это уже проще. Однако то на чем я застопорился окончательно это клиент. Он так и не реагировал на сервер. Может быть если был в проекте какой то пример готовый к работе было бы не ного проще разобраться.


Возможно одна из причин что я выполнял не yum install а apt-get install

Пробовал тогда кстати с autobahn клиентом. Работает ли с ним wiola или нужно брать тот клиент на который ссылка в readme wiola?

https://gist.github.com/haizaar/208e4c63954db1cbc3aa1de4b8e5951f нашел кстати вариант. Жаль что его не была когда я пробовал с этим всем разобраться. WAMP по своему потенциалу технология которая может потеснить все эти к8с. Ей бы еще обзавестись средствами деплоя сервисов и проверки состояния и чуть больше маркетинга.

Еще раз попробовал запустить си стему с образом докера из примера. Результат такой что RPC заработало без проблем а publish/subscribe не отвечает. Пробовал на двух клиентах wampy и autobahn

Хм… Ну это очень странно… Разницы никакой нет. Надо будет глянуть. Потому что я давно уже не залезал в wiola, да и wampy тоже :) но они точно оба работают :)

Тут получилась вот какая штука. Закопипастил пример и там было из-за асинхронности работы вызов подписки после вызова публикации. Все работет.

Но все равно есть вопрос. Как выяснилось что подписка работает только в том случае если подписка и публикация были в разных сессиях сделаны (проверял двумя клиентами, наверное именно на этом моменте в свое время застрял. Сегодня чисто случайно попробовал с разных коннекшинов подписаться и публиковаться). Если подписка от одного объекта идет — то не работает. Вобщем-то достаточно искусственный случай когда подписчик и публишер это один объект. Но во многих примерах это так написано. То есть протокол, наверное, явно не запрещает и публиковать и подписываться с одной сессии.

Это всё описано в протоколе :) По умолчанию да, событие не публикуется в сессию инициатор. Ибо это довольно специфичный кейс. Но в Advanced Profile есть возможность указать, что прислать сообещение и самому себе. И тогда получишь.

WAMP — к сожалению — также не решает эти вопросы. Пэтому для чатов лучше использовать что-то вроде MQTT.

Ну там есть подтверждение доставки в Advanced Profile. Это конечно не прям тоже самое, что гарантированная доствка в каком-ньть RabbitMQ, но всё же

Подтверждение есть и в socket.io. Результат от этого нулевой. Так как все стороны должны реализовать на уровне приложения по факту тот же mqtt только это практически невозможно. Потому что на уровне протокола работает математика строгая. А на уровне приложения уже зависит от подробностей.

Скажите вы не рассматривали кросс-платформенное решение для бизнес логики? Возможно на нативе (c/c++) есть библиотеки где нет проблем с которым вы столкнулись. Хотя если у вас 80% это UI логика, то, конечно, не стоит так заморачиваться. Спасибо, было интересно почитать )
Не рассматривали, так как, действительно, бОльшая часть логики связана с подготовкой и отображением данных.
Sign up to leave a comment.