Быстрый однопоточный комет-сервер, возможно? - PullRequest
1 голос
/ 17 июня 2010

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

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

1 голос
/ 17 июня 2010

Если вы используете ASP.NET, следующий пост должен быть полезен

http://beta.codeproject.com/KB/aspnet/CometAsync.aspx

Кстати, можно реализовать Comet для обслуживания более одного клиента на поток, но только одного потока для всех клиентов недостаточно?

1 голос
/ 17 июня 2010

Проверьте node.js - однопоточный, управляемый событиями сервер. Использует JavaScript в качестве бонуса.

0 голосов
/ 10 января 2011

Вы говорите об «асинхронных веб-запросах», применяемых к Comet, некоторые, например, «асинхронная Comet».

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

...