Тема: Java socket
Показать сообщение отдельно
Старый 17.08.2016, 06:01
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Это вполне штатная ситуация и в конце сессии клиент должен передавать end
Сессия может (и чаще всего так и бывает) завершиться не штатно: закрыл страницу в браузере, отрубился интернет, вырубили электричество, разбил комп в препадке гнева Оо. Так что отключение клиента в любом случае должен разруливать сервер.

Уже давно придуманы механизмы проверки участия клиента. Самый простой вариант - heart_beat. Раз в определенный интервал времени, к примеру секунда, клиент и сервер обмениваются "сердцебиением", то есть просто короткое сообщение (любое, я всегда слал просто hb, чтобы было понятно), и если клиент прислал серверу ответ на его запрос hb, то сервер считает, что клиент онлайн и не отключает его.
Может возникнуть ситуация задержки в сети, поэтому сервер, если не получил ответ, должен еще какое-то время подждать. Если этот таймаут истек, и ответ так и не получен, значит клиент отключился и нужно удалить его из списка активных.
Рассчитывать на Exception глупо, сервер может считать, что клиент не отключился и держать его в своем списке как нормального
__________________
Ко мне можно и нужно обращаться на ты)