powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Вопрос по чату
5 сообщений из 5, страница 1 из 1
Вопрос по чату
    #40060823
Swv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Допустим возник такой сценарий.

1. Подключается А
2. Шлёт сообщение в чат Х пользователю Б
3. Сервер через pubsub редиса кидает это сообщение подписчику. По ид чата.
4. Подписчик (тот же сервер) получает сообщение. Смотрит кому и ищет каким то образом подключённого получателя. Не нашёл - отбросил.
5. После сервер кладёт это сообщение в редис в список сообщений диалога

Допустим на этапе 4 каким то образом уже после проверки на наличие получателя , но до отправки сообщения в список редиса, появляется получатель. Шустро. Берет из редиса список сообщений диалога и все. Но список ещё не обновлён на этапе 5.
Получается получатель уверен, что список сообщений корректный. Но последнего сообщения он не получил.
Как разрулить ситуацию?
...
Рейтинг: 0 / 0
Вопрос по чату
    #40061009
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мутексами. Пункт 5 перевесить на пункт 4.
...
Рейтинг: 0 / 0
Вопрос по чату
    #40061068
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swv
Не нашёл - отбросил.

Что значит отбросил? Потерял?

Swv
Как разрулить ситуацию?

Можно по-разному, но в целом ситуация выглядит нездоровой архитектурно. Я бы сказал, здоровая архитектура строится так:

1. А шлёт сообщение в чат. Сервер кладёт его в общий список сообщений чата и после этого, возможно, рассылает подключённым подписчикам оповещение "в чате есть новые сообщения, максимальное id = такое-то". Для снятия избыточной нагрузки отправляет только одно оповещение на несколько пришедших реплик, например, откладывая новое оповещение, если с момента предыдущего прошло менее T секунд.

2. Б, получив оповещение, и/или подключившись и/или по таймеру обращается к серверу с запросом "дай мне сообщения из чата X которые были после id = такой-то". Получает пустой или непустой список, отображает его, запоминает у себя id последнего сообщения, чтобы использовать его в следующем запросе.

Всё. Возможности для проблемных ситуаций просто-напросто нет. В частности, сериализовать нужно только попытки одновременно положить сообщение в чат.
...
Рейтинг: 0 / 0
Вопрос по чату
    #40061249
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Если клиент запросит список сообщений только после успешного подключения к брокеру, то и в изначально-костыльной схеме проблем не будет :)
...
Рейтинг: 0 / 0
Вопрос по чату
    #40061257
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Если клиент запросит список сообщений только после успешного подключения к брокеру, то и в изначально-костыльной схеме проблем не будет :)

Ну вот автор их находит. За счёт двух разных путей доставки сообщения и несинхронности работы с ними.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Вопрос по чату
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (7): Анонимы (5), Bing Bot 1 мин., Yandex Bot 1 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]