Javascript на стороне клиента может определить, когда сервер закрыл соединение http, когда клиент работает? - PullRequest
1 голос
/ 10 апреля 2009

В моем приложении клиент представляет собой набор функций Javascript в браузере, и он выполняет некоторую работу - например, проигрывает клип. Он использует XmlHttpRequest для общения с сервером. Однако серверу разрешено внезапно закрывать соединение, так как, похоже, нет другого способа прервать клиент. Может ли клиент во время воспроизведения клипа обнаружить, что соединение было закрыто, и таким образом распечатать сообщение и стереть страницу? Любая помощь приветствуется. Спасибо, Анил

Ответы [ 3 ]

1 голос
/ 10 апреля 2009

Если клип передается клиенту, вы можете просто перестать его обслуживать.

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

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

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

0 голосов
/ 20 апреля 2009

Похоже, что сервер не может уведомить клиента о том, что соединение закрыто; однако предложенный метод опроса не так эффективен, как было бы уведомление.

Я решил это, указав, что при следующем запросе Get клиенту будет сообщено, что его сеанс недействителен.

Это было реализовано путем перезаписи URL - добавление "jsessionid = [id]" к каждому запросу, отправленному функциями Javascript. сервлет хранит текущий идентификатор сессии.

0 голосов
/ 10 апреля 2009

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

...