Вопрос по browser, comet, timeout, ajax – Тайм-аут поведения разных браузеров?

6

Я пишу онлайн-чат на основе AJAX / COMET. Мой дизайн:

Запрос

----------------- подождите ------------------------- & gt; отправить дамп данных

----------------- подождите ------------------------- & gt; отправить дамп данных

----------------- подождите ------------------------- & gt; отправить дамп данных

----------------- подождите ------------------------- & gt; отправить дамп данных

----------------- подождите ------------------------- & gt; отправить дамп данных

------ что-то случилось, получить ответ.

Another request ..... ....

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

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

Теперь возникает проблема: каково время ожидания в разных браузерах? Я знаю, что браузер отправляет запрос и ожидает данные, если ожидание займет слишком много времени, произойдет тайм-аут. Но что это за время ожидания в разных браузерах? И есть ли заголовок, который может контролировать поведение тайм-аута браузера? Зная время ожидания браузеров, я могу решить, что с ними делать. Где я могу найти эти данные?

Посмотри на этот ответstackoverflow.com/a/1343963/779408 Bobs

Ваш Ответ

1   ответ
9

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

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

Для простой скрытой установки клиента iframe,это не так сложно сделать - и это одинаково легко для запросов XHR, в зависимости от того, какую платформу на стороне клиента вы используете.

Тайм-аут для большинства современных браузеров, кажется,довольно большой в IE (60 минут? Wow) и короче в FF (о: config говорит 300 секунд - eek) - но, как я уже сказал, это не поможет вам против прокси-сервера, где время ожидания может составлять всего 2 минуты или меньше, в зависимости от того, как прокси-сервер настроил его.

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

Похожие вопросы