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

StackOverflow https://stackoverflow.com/questions/737878

  •  09-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение 3

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

Я решил это, указав, что при СЛЕДУЮЩЕМ запросе Get клиенту будет сообщено, что его сеанс недействителен.

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top