2010-03-11 2 views
2

Я пытаюсь использовать COMET solution using ASP.NET.Комета и одновременный запрос Ajax

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

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

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

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

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

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

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

Ссылки:

How many concurrent AJAX (XmlHttpRequest) requests are allowed in popular browsers?

AJAX, PHP Sessions and simultaneous requests

jquery .ajax request blocked by long running .ajax request

jQuery: Making simultaneous ajax requests, is it possible?

+0

Есть два проекта, которые могут оказаться полезными: Comet Ajax для ASP.NET: http://pokein.codeplex.com Открыть исходный IIS инструмент Tuning: http://iistuner.codeplex.com – Zuuum

ответ

5

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

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

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

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

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

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

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

+0

Thx.I можно отправлять и получать с использованием одного экземпляра IE, но не более того. – Amitd

2

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

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

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

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

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

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

+0

Да я согласитесь. эта часть повторяющегося запроса клиента работает хорошо. Проблема в том, что я не могу открыть еще одно соединение с сервером (а не Comet ..simple ajax) для отправки данных одновременно. – Amitd

+0

Есть обходные пути, см. Мой ответ выше. – jvenema

Смежные вопросы