Комета и одновременный запрос Ajax - PullRequest
2 голосов
/ 11 марта 2010

Я пытаюсь использовать решение COMET с использованием ASP.NET .

Проблема в том, что я хочу реализовать отправку и уведомление на одной странице. В IE7, когда я пытаюсь отправить запрос, он просто ставится в очередь. Прочитав страницы Интернета и stackoverflow, я обнаружил, что могу выполнять только 2 одновременных асинхронных асинхронных запроса на страницу.

Так что, пока я не закрою свой кометный запрос Ajax, мой второй запрос не будет выполнен, даже не выйдет из браузера. И когда я проверил с помощью Firefox, я всего лишь один кометный запрос Ajax выполнялся все время ... так что, не оставил ли я еще один ajax запрос?

Также решение использует IRequiressessionstate для Asynchronous HTTP Handler, который я удалил. Но это все еще создает проблемы на нескольких экземплярах IE7.

У меня была одна работа, о которой говорится здесь http://support.microsoft.com/kb/282402
это означает, что мы можем увеличить лимит запросов из реестра по умолчанию 2.
Путем изменения клавиши « MaxConnectionsPer1_0Server »
в кусте "HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings" мы можем увеличить количество запросов.

По сути, я хочу транслировать информацию нескольким клиентам, подключенным к серверу с использованием Comet, и клиенты также могут отправлять сообщения на сервер.
Вещание работает, но отправка запроса обратно на сервер не работает.

Я использую IIS 6 и ASP.NET.

Есть ли еще способы обхода или способы отправки большего количества запросов?

Рекомендации:

Сколько одновременных запросов AJAX (XmlHttpRequest) разрешено в популярных браузерах?

AJAX, сеансы PHP и одновременные запросы

jquery .ajax-запрос заблокирован из-за длительного выполнения .ajax-запроса

jQuery: возможно ли одновременное выполнение запросов ajax?

Ответы [ 2 ]

5 голосов
/ 11 марта 2010

Вы ограничены двумя соединениями, но обычно это все, что вам нужно - 1 для отправки, 1 для получения, даже в IE.

Тем не менее, вы можете полностью сделать это; мы делаем это все время в WebSync . Решение заключается в поддоменах.

Следует отметить, что IE (и другие браузеры, хотя они обычно ограничивают 6 запросов, а не 2) ограничивает запросы на домен - но это ограничение распространяется на весь домен , за исключением поддоменов . Например, вы можете открыть 2 запроса для «www.stackoverflow.com» и еще 2 запроса для «static.stackoverflow.com» одновременно.

Теперь вы должны быть осторожны с этим подходом, потому что, если вы делаете запрос от поддоменов www к статическому поддомену, это считается междоменным запросом, поэтому вы сразу же ограничиваетесь тем, что не используете прямой XHR звонит, но в этот момент вы все же обошли предел 2-х соединений; JSONP, HTML5 и т. Д. - все ваши друзья для обхода ограничений между доменами.

Редактировать

Управление с> 1 экземпляром IE возвращает к той же проблеме. Ограничение применяется во всех случаях. Итак, если у вас два открытых браузера и оба используют комету, вы застряли с двумя открытыми соединениями с длинным опросом. Если вы максимизировали свои параметры, вы будете подключать эти длинные запросы к чему-то вроде «comet.mysite.com», а ваши недолгие запросы будут переходить на «mysite.com». Это лучшее, что вы получите, не вдаваясь в подстановочный DNS.

Ознакомьтесь с некоторыми из наших WebSync Demos ; они работают в 2 экземплярах IE без проблем. Если вы проверите источник, вы увидите, что DNS для потокового соединения отличается от главной страницы; мы используем JSONP для обхода междоменного ограничения.

2 голосов
/ 11 марта 2010

Основная идея COMET - оставить один запрос клиент-сервер открытым, пока не потребуется ответ.

Если вы правильно разработали свой код, вам не нужно открывать более двух запросов одновременно. Вот как это работает:

  • клиент использует центральный цикл отправки-приема сообщений для отправки запроса на сервер
  • сервер получает запрос и сохраняет его открытым.
  • в какой-то момент сервер отвечает клиенту.
  • клиент (браузер) получает ответ, обрабатывает его в своем центральном цикле сообщений.
  • немедленно клиент отправляет другой запрос.
  • повтор

Ключ заключается в том, чтобы централизовать и асинхронизировать все коммуникации на клиенте. Таким образом, вам никогда не нужно иметь 2 открытых запроса.

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

Увеличьте лимит подключений или уменьшите количество подключений, которые вы используете.

...