Недавно я столкнулся с несколькими случаями, когда сервер распространял поток событий, который содержит одинаковые данные для всех слушателей, например, поле «Недавние действия».
Мне пришло в голову, что довольно странно и неэффективно, чтобы сервер наподобие Apache запускал обработку потоков и запрашивал базу данных для каждого отдельного потока комет, содержащего те же данные.
Что бы я сделал для этих глобальных (не для пользователя) потоков - это запустить один поток, который непрерывно излучает данные, и новый (зеленый) поток для каждого нового запроса, который выводит заголовки, а затем «сливается» в основной поток .
Можно ли одному потоку обслуживать несколько сокетов или нескольким клиентам прослушивать один и тот же сокет?
Пример
o = событие
# threads received
| a b # 3
o / / # 3 -
|/_/
| # 1
o c # 2 a, b
| /
o/ # 2 a, b
o # 1 a, b, c
| # connection b closed
o # 1 a, c
Существует ли что-то подобное? Будет ли это работать? Можно ли это сделать?
Отказ от ответственности: я не эксперт по серверу.