169 похожих чатов

Привет, тут такой вопрос, как можно синхронизировать N процессов, возможно,

все на разных машинах. Для примера, есть обычный чат, в нем два примитива: пользователь и комната, к комнате подключаются пользователи, и если кто-то пищет сообщение то оно рассылается всем в этой комнате. Все работает логично когда все комнаты в одном процессе, и состояние комнаты (все подключения, доп информация какая-то, не суть) находится в одной памяти, можно просто взять и разослать всем. А что делать если пользователи подключатся к разным процессам? Тогда комната будет разбита на несколько процессов и получается как-то больно.
Мне в голову пришло два варианта:
1) сделать это все дело на pub/sub системе типо redis. От Aws и Google тоже что-то было. Получается что-то вроде системы где сама комната как факт не хранится, просто сущность поддерживающая пользователя подписывается на входящие сообщения и ловит их как они публикуются, но есть одно НО . Вроде как система все равно остается централизованной опираясь на pub/sub сервер, который распаралелить скорее всего тоже будет больно.
2) прикрутить балансировщик нагрузки и в итоге получится таже однпроцессная система где мы храним комнату только в одном процессе и вместе с ней все подключения, а сами комнаты могут быть раскиданы где угодно
========================
Может есть еще какие-то варианты, подскажите школяру)
Ну или дайте совет по поводу имеющихся вариантов, подкиньте возможные сервисы или как это лучше реализовать.

2 ответов

16 просмотров

Асинхроно можно сделать если отмечать каждого пользователя которому отправлялось сообщение. И асинхроный скрипт будет обращаться к этой записи перед проведением отправки. Лучше записать туда время. Что бы при отсутствии подтверждения о получении сообщения спустя некоторое время попытка отправки повторилась. Возможно для подобного есть библитека.

зочем? есть джаббер

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта