Как справиться с большим набором ожидающих запросов - PullRequest
0 голосов
/ 04 ноября 2011

Я хочу создать веб-сайт, который будет отображать пользователю уведомление о каком-либо событии, произошедшем на сервере.Мой план:

  1. сделать асинхронный запрос к серверу (ASP.NET), который будет иметь 600-секундный тайм-аут
  2. , если событие происходит на сервере во времяс интервалом в 600 секунд сервер ответит подробностями события
  3. , если событие не произошло, то сервер отправит ответ «нет события» по истечении 600 секунд
  4. JS после полученияобратная связь с сервера обработает ответ и отправит следующий запрос.

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

Вопросы :

Должен ли я считать это проблемой?Какое решение для этого?Возможно, мне следует применить другой подход?

Пожалуйста, совет, любые отзывы приветствуются.

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Я не знаю подробностей об обработке ожидающих запросов asp.net, но то, что вы описываете, это в основном длинный опрос.Это сложно по ряду причин, включая, но не ограничиваясь:

  • каждый ожидающий запрос потребляет поток, и вам нужно будет сохранить состояние в каждом из этих потоков
  • , еслиу вас достаточно соединений (не обязательно столько, сколько; см. выше), вам нужно, чтобы они охватывали несколько компьютеров, а затем вам нужно придумать архитектуру для распределения конечных точек по этим машинам и убедиться, что каждый входящий запрос направляетсяправильная машина.Если вы только транслируете одни и те же данные всем своим пользователям, это становится намного проще.
  • прокси или интернет-провайдеры или что вы можете отключить ваш запрос на длительный опрос.Вам понадобится архитектура, устойчивая к этому.

Вот вопрос о длинном опросе в asp.net: Как выполнять длинные запросы AJAX в ASP.NET MVC? Вероятно, это хорошее место для начала.

Также вы можете рассмотреть стороннюю службу, такую ​​как pusher , для обработки этих соединений за вас, или (отказ от ответственности: я работаю в App Engine) AppAPI канала двигателя.

0 голосов
/ 04 ноября 2011

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

например. отправлять AJAX-запрос каждые 60 секунд или около того и возвращать, произошло ли какое-либо событие. Недостатком является то, что пользователю может потребоваться до минуты, чтобы увидеть уведомление о каком-либо событии, поэтому, если вам это нужно более или менее немедленно, это проблема.

Если это нужно сделать немедленно, похоже, что поиск в "длинном опросе" с помощью что-то вроде node.js может быть решением, хотя его нетривиально реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...