|
Вопрос по чату
|
|||
---|---|---|---|
#18+
Здравствуйте. Допустим возник такой сценарий. 1. Подключается А 2. Шлёт сообщение в чат Х пользователю Б 3. Сервер через pubsub редиса кидает это сообщение подписчику. По ид чата. 4. Подписчик (тот же сервер) получает сообщение. Смотрит кому и ищет каким то образом подключённого получателя. Не нашёл - отбросил. 5. После сервер кладёт это сообщение в редис в список сообщений диалога Допустим на этапе 4 каким то образом уже после проверки на наличие получателя , но до отправки сообщения в список редиса, появляется получатель. Шустро. Берет из редиса список сообщений диалога и все. Но список ещё не обновлён на этапе 5. Получается получатель уверен, что список сообщений корректный. Но последнего сообщения он не получил. Как разрулить ситуацию? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2021, 20:20 |
|
Вопрос по чату
|
|||
---|---|---|---|
#18+
Мутексами. Пункт 5 перевесить на пункт 4. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 14:07 |
|
Вопрос по чату
|
|||
---|---|---|---|
#18+
Swv Не нашёл - отбросил. Что значит отбросил? Потерял? Swv Как разрулить ситуацию? Можно по-разному, но в целом ситуация выглядит нездоровой архитектурно. Я бы сказал, здоровая архитектура строится так: 1. А шлёт сообщение в чат. Сервер кладёт его в общий список сообщений чата и после этого, возможно, рассылает подключённым подписчикам оповещение "в чате есть новые сообщения, максимальное id = такое-то". Для снятия избыточной нагрузки отправляет только одно оповещение на несколько пришедших реплик, например, откладывая новое оповещение, если с момента предыдущего прошло менее T секунд. 2. Б, получив оповещение, и/или подключившись и/или по таймеру обращается к серверу с запросом "дай мне сообщения из чата X которые были после id = такой-то". Получает пустой или непустой список, отображает его, запоминает у себя id последнего сообщения, чтобы использовать его в следующем запросе. Всё. Возможности для проблемных ситуаций просто-напросто нет. В частности, сериализовать нужно только попытки одновременно положить сообщение в чат. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 15:33 |
|
Вопрос по чату
|
|||
---|---|---|---|
#18+
softwarer, Если клиент запросит список сообщений только после успешного подключения к брокеру, то и в изначально-костыльной схеме проблем не будет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 22:51 |
|
Вопрос по чату
|
|||
---|---|---|---|
#18+
hVostt Если клиент запросит список сообщений только после успешного подключения к брокеру, то и в изначально-костыльной схеме проблем не будет :) Ну вот автор их находит. За счёт двух разных путей доставки сообщения и несинхронности работы с ними. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 23:14 |
|
|
start [/forum/topic.php?fid=33&msg=40061009&tid=1547063]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 256ms |
total: | 399ms |
0 / 0 |