Быстрый одноточный сервер комета, возможно?
-
28-09-2019 - |
Вопрос
Недавно я столкнулся с несколькими случаями, когда сервер будет распространять поток событий, содержащий то же самое данные для всех слушателей, таких как «недавняя активность».
Мне пришло в голову, что вполне странно и неэффективно иметь сервер, такой как 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
Есть ли что-то вроде этого? Будет ли это работать? Можно ли сделать?
Отказ от ответственности: Я не эксперт сервера.
Решение
Ознакомьтесь с Node.js - Single Threade, управляемый событием сервера. Использует JavaScript в качестве бонуса.
Другие советы
Если вы используете ASP.NET, следует полезно следующий пост
http://beta.codeProject.com/kb/aspnet/cometasync.aspx.
Кстати, можно реализовать комета для обслуживания более одного клиента на тему, но только один нить для всех клиентов кажется недостаточно?
Вы говорите о «асинхронных веб-запросах», применяемых к Comet, некоторые, как «асинхронная комета».
По моему мнению этот подход, так популярен в эти дни, глубоко недостаточно.