Keep-alive для долгоживущего сеанса HTTP (не постоянный HTTP) - PullRequest
3 голосов
/ 02 апреля 2010

На работе у нас есть система клиент-сервер, где клиенты отправляют запросы на веб-сервер через HTTP. Обработка на стороне сервера может иногда занимать более 60 секунд, что является значением тайм-аута прокси-сервера, установленным ИТ-специалистами нашей компании, и его нельзя изменить. Есть ли способ сохранить HTTP-соединение живым дольше 60 секунд (предпочтительно в течение сколь угодно длительного периода времени), с помощью сообщений пульса от сервера или клиента?

Я знаю, что есть постоянные соединения HTTP 1.1, но это не то, что я хочу.

Имеет ли HTTP возможность поддержания активности, или это должно быть сделано на уровне TCP через какую-либо опцию сокета?

Ответы [ 3 ]

2 голосов
/ 02 апреля 2010

Это должно помочь вам начать.

1 голос
/ 02 апреля 2010

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

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

0 голосов
/ 02 апреля 2010

Просто пусть ваш сервер отправляет поток неактивных данных во время обработки - если результат в HTML, то что-то вроде:

<!-- keepalive -->

отправляется каждые 10 секунд.

...