@drqqv

Как постоянно получать данные с БД?

Хочу создать что-то типо веб - мессенджера. У меня имеется хэндлер, который принимает вебхуки с текстовыми сообщениями и пишет их в базу (хэндлер получает вебхуки с ВК). Так же имеется супер простой сокет, который создает общий чат с людьми, которые подключились к нему и общение идет с клавиатуры.

Сам вопрос: не понимаю как отправлять полученные сообщения и сообщения из базы данных через сокет, грубо говоря, как сделать, чтобы сокет слушал базу и новые полученные сообщения с вубхух хэндлера?

Пока в голове один вариант:
Все хэндлеры импортировать в скрипт с сокетом, но мне кажется, что не сильно хорошая идея, потому что в перспективе надо добавить еще несколько хэндлеров
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev
software engineer
Почитать про брокеры, типа kafka/rabbit mq
Ответ написан
@rPman
Использовать базу данных как источник событий - плохая идея, т.е. это возможно, разные базы данных предлагают для этого разные инструменты, типа sqlite notifications, postgres notify, у mysql точно видел как мониторили изменения читая binary logs напрямую, в любом случае это извращения.

У тебя уже должен быть процесс, обслуживающий websocket и обрабатывающий все действия клиентов, пусть этот процесс и делает необходимые манипуляции на приходящие события либо отправляет сообщения по другим каналам. Т.е. база данных это только место для данных, человек отправил сообщение, бакэнд это сообщение обработал, положил данные в базу данных и дернул метод/послал сообщение что в базе появилось сообщение с таким id (или как тебе удобно), вторая часть бакэнда это сообщение получает, читает данные из базы и обрабатывает дальше (лично я считаю разделять на разные процессы это бессмысленно но мало ли какая у тебя задача)
Ответ написан
Комментировать
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
"хэндлер, который принимает вебхуки с текстовыми сообщениями и пишет их в базу" разве не может сразу ещё отправлять эти сообщения в "сокет, который создает общий чат с людьми" ?
Или, если операции блокирующие, то отправлять в `очередь сообщений`. Может быть и база не нужна?
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Внезапно БД могут исполнять действия по событиям.
Как то отправка почты или вообще исполнение внешних команд.
Ну и используйте их
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы