Тайм-ауты RequestBuilder и ограничения подключения браузера для домена - PullRequest
2 голосов
/ 03 июня 2010

Речь идет конкретно о RequestBuilder от GWT, но должна применяться и к обычному XHR. Моя компания заставляет меня создавать чат-приложение практически в реальном времени по HTTP. Да, я понимаю, что есть лучшие способы делать чаты, но это то, что они хотят. В конце концов мы хотим, чтобы он работал и на iPad / iPhone, чтобы не было флэш-памяти, что исключает веб-сокеты и комету, я думаю?

В любом случае, я сталкиваюсь с проблемами, если я установил тайм-аут GBT RequestBuilder на 10 секунд, и мы получаем очень случайные и случайные таймауты. У нас есть обработка ошибок и отправка по электронной почте на стороне сервера, и мы никогда не получаем никаких ошибок, что говорит о том, что основной запрос XHR, на котором построен RequestBuilder, никогда не попадает на сервер и время ожидания истекает через 10 секунд.

Мы используем этот запрос, чтобы довольно часто опрашивать сервер на наличие новых сообщений, а также отправлять новые сообщения на сервер, а также опрашивать (реже) другие части приложения. Чего я боюсь, так это того, что мы ограничиваем количество одновременных подключений к одному домену в браузерах (по умолчанию 2 для IE?).

Теперь мой вопрос: если я создаю RequestBuilder и вызываю его метод send () и браузер блокирует его отправку до тех пор, пока одно из 2 подключений на домен не освободится, тайм-аут все еще начинается, пока запрос блокируется или он не запустится, пока браузер не выпустит базовый XHR?

Надеюсь, это понятно, если нет, пожалуйста, дайте мне знать, и я постараюсь объяснить больше.

Ответы [ 3 ]

2 голосов
/ 04 июня 2010

На странице документа GWT Incubator есть статья, объясняющая отправка сервера . С помощью этой техники вы все время держите только одно открытое соединение.

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

Браузеры допускают только 2 соединения на имя хоста; теперь это изменилось. «Современные» браузеры допускают до 6 одновременных подключений - это зависит от браузера. См. http://www.browserscope.org/ - вкладка сети.

Что касается таймера, он запускается до того, как GWT вызовет xhr.send(), поэтому ваше подозрение верно. См. Request.java и RequestBuilder.java, если вы хотите отследить его.

0 голосов
/ 03 июня 2010

Кажется, наполовину, вы отвечаете на свой вопрос, как только отправляете его.

Через: http://google -web-toolkit.googlecode.com / svn / javadoc / 1.6 / com / google / gwt / http / client / package-summary.html

Предел ожидающих запросов - Современные веб-браузеры ограничены наличием только двух HTTP-запросов одновременно. Если ваш сервер сталкивается с ошибкой, которая не позволяет ему отправить ответ, он может связать ваши невыполненные запросы. Если вас это беспокоит, вы всегда можете установить таймауты для запроса через RequestBuilder.setTimeoutMillis (int).

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