LINUX.ORG.RU

Посоветуйте чтиво по дизайну message bus

 eventual consistency


0

1

https://github.com/nodeca/tabex

Есть с виду простая задача - сделать обмен сообщениями между окнами браузера. Это так или иначе делается через общие ресурсы, к которым окна или их фреймы могут иметь доступ (LocalStorage, IndexedDB, cookies).

Проблема в том, что в некоторых браузерах уведомления об обновлении ресурсов сделаны через одно место (сообщение может вообще не прийти, прийти то того как данные обновятся для всех, а не только в локальном окне, и т.п.). Поэтому напрашивается что-то более классическое, где есть «append-only log» и поллинг (и потом все накопленные события получаем пачками).

Кто-нибудь может посоветовать книжки или проекты, где реализовано что-то подобное? Чтобы разобраться какие нюансы есть в реализации оплогов, какие нюансы при их проигрывании и т.п. Желательно не трехтомники, взрывающие мозг. Не хотелось бы лисапед изобретать.

Сейчас сделано совсем просто - на проблемные случаи положен болт, т.к. на практике это значит, что вкладки браузера полезут к серверу не через общий мастер, а каждая сама по себе. И это приемлимо. Но хочется же сделать красивее.

PS. Подтверждения доставки не требуется. Достаточно чтобы порядок сообщений от одного источника не ломался.

PPS. В принципе, если кто-то хочет прославиться в веках и самостоятельно имплементировать эту фичу в текущем проекте, готов насыпать 500+ денег. Не уверен что у самого руки скоро дойдут.

★★★★★
Ответ на: комментарий от anonymous

Шёл бы ты в жопу, клоун.

Vit ★★★★★
() автор топика
Ответ на: комментарий от emmawatsondtypants

Проект с <2000 звезд даже рассматривать не стоит.

anonymous
()

сделать обмен сообщениями между окнами браузера. Это так или иначе делается через общие ресурсы, к которым окна или их фреймы могут иметь доступ (LocalStorage, IndexedDB, cookies).

Если мне не изменяет память, с ЭТИМ все время борятся и сооброжений безопасности.

robot12 ★★★★★
()
Ответ на: комментарий от robot12

Речь о вкладках на одном проекте. Например, открывается 20 тем на форуме. Поднимать в каждой вебсокет некузяво. Или если логинятся в одной вкладке, остальное стоит зарефрешить.

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

Vit ★★★★★
() автор топика
Ответ на: комментарий от A1

Если я правильно понял, там распределеннная система. А у меня все-таки есть общее хранилище, где можно организовать атомарные апдейты.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

А у меня все-таки есть общее хранилище, где можно организовать атомарные апдейты.

Тогда вообще не понимаю проблемы. Пиши@читай, как говорится. Мне из темы показалось, что есть несколько окошек и у каждого должна быть консистентная история, но при этом хранилища как раз нет.

A1
()
Ответ на: комментарий от A1

Чуйка подсказывает, что наверняка нюансы есть. Особенно в реализации лога на LocalStorage - когда есть key/value, и список ключей лучше часто не читать.

Vit ★★★★★
() автор топика
Ответ на: комментарий от A1

Ты знаешь как сделать быстрые локи между окнами? Не обязательно на локалсторе.

У локалстора есть косяк - если ты записал, это значит что проапдейтилась локальная вьюха хранилища. Но ни каких гарантий, что данные реально отписались на диск и распространились на другие вкладки/окна.

Там можно сделать задержку на 30 мс и это вроде помогает, но скорости хана. Или можно на эвенты садиться, но они тоже фигово работают в некоторых браузерах, особенно если код в iframe с другого домена.

https://github.com/nodeca/tabex/issues/6 какбэ уже спотыкались

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

быстрые локи

Если поток сообщений настолько плотен, я бы уже смотрел в сторону вебсокетов и поддержки синхронизации на беке.

A1
()
Ответ на: комментарий от A1

Блин, это делается как раз для того, чтобы не лепить коннекты из каждой вкладки.

Vit ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.