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

Сорри за оффтоп, не знаю где спросить. Компонент чата. Каждые 3

секунды делается запрос к API, чтобы узнать есть ли новые сообщения. Сокеты не подключали, чтобы не усложнять, но вопрос не про это :)

Меня смущает, что каждые 3 секунды на бэкэнде делается запрос в базу. И большинство этих запросов не отдают новой информации.

Как можно улучшить это все? Я придумал только положить id последнего сообщения в редис, при запросе к api присылать id последнего сообщения на клиенте и дергать сначала редис, а базу дергать только если они не совпадают.

10 ответов

38 просмотров

Сокеты

Vadim- Автор вопроса
Max Kiner
Сокеты

Так они же не решают проблему постоянных запросов к базе :)

Vadim- Автор вопроса
Max Kiner
Решают

Уточню. Чат не между людьми в этой системе. Это чат оператора с людьми в чат-ботах мессенджеров. Т.е. сообщения из мессенджеров кладутся в базу сначала.

В твоём случае при поступлении новых сообщений в бд надо как ты и сказал положить в какую нибудь прослойку редис или ребитмк. Далее дергать её, ну и обновлять своевременно.

Vadim- Автор вопроса
Aleksandr Drozdov
В твоём случае при поступлении новых сообщений в б...

Спасибо! Попробую так сначала. Не хочется сокеты еще поднимать.

Vadim
Спасибо! Попробую так сначала. Не хочется сокеты ...

можно server sent events (SSE) если ws и php берите ratchet (reactphp)

Vadim- Автор вопроса
Сергей Rekryt Крупкин
можно server sent events (SSE) если ws и php берит...

Спасибо за ответ! Да, лучше взять ratchet. SSE на клиенте вроде просто, но на php сходу не нашел как сделать.

Vadim
Спасибо за ответ! Да, лучше взять ratchet. SSE на ...

с помощью ratchet можно и ws и sse и http сервер если что

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта