Быстрый однопоточный кометный сервер, возможно?
Недавно я столкнулся с несколькими случаями, когда сервер распространял поток событий, который содержит одинаковые данные для всех слушателей, например, поле "Недавние действия".
Мне пришло в голову, что довольно странно и неэффективно, чтобы сервер наподобие 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
Существует ли что-то подобное? Будет ли это работать? Можно ли это сделать?
Отказ от ответственности: я не эксперт по серверу.
3 ответа
Проверьте node.js - однопоточный, управляемый событиями сервер. Использует JavaScript в качестве бонуса.
Если вы используете ASP.NET, следующий пост должен быть полезным
http://beta.codeproject.com/KB/aspnet/CometAsync.aspx
Кстати, можно реализовать Comet для обслуживания более одного клиента на поток, но только одного потока для всех клиентов кажется недостаточно?
Вы говорите об "асинхронных веб-запросах", применяемых к Comet, некоторые, например, "асинхронные Comet".
На мой взгляд, такой популярный в наши дни подход глубоко ошибочен.