Быстрый однопоточный кометный сервер, возможно?

Недавно я столкнулся с несколькими случаями, когда сервер распространял поток событий, который содержит одинаковые данные для всех слушателей, например, поле "Недавние действия".

Мне пришло в голову, что довольно странно и неэффективно, чтобы сервер наподобие 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".

На мой взгляд, такой популярный в наши дни подход глубоко ошибочен.

Другие вопросы по тегам