![]() |
Отловить disconnect клиента на сервере !
Всем привет !
Много видел в темах что советуют для написания онлаин игр писать свой сервер на c++ Я написал всой socket сервер на с++ , но тут появилась проблема как отловить на стороне сервера что клиент отключился например (отключился нет у клиента или еще что - то , порыв связи) вобщем разумного решения этой проблеме я не нашел ! Может кто сталкивался с такой проблемой ? |
Можно сверять время приема последнего пакета от клиента и текущее время на сервере. Если разница между ними большего некоего допустимого времени ожидания ответа от клиента сервером, то клиент считается неактивным.
|
Цитата:
Впринцыпи идея - нада все обдумать ! Если у кого будут еще предложения прошу высказыватся - или может уже кто на приктике реализовывал ! Добавлено через 33 часа 3 минуты Вопрос еще актуален , кто еще как реализовывал подобную проблему ? |
Цитата:
|
Ну да, конечно ... :)
А как же Comet-технология? Неплохо реализована в Tomcat 6, правда, до 16-ой версии были глюки с NIO, потом исправили (юзаю сейчас 19 релиз - все пучком). Если рассматривать в данном контексте, то мгновенно реагирует не только на ошибку, но даже распознает дисконнект - таймаут, принудительный разрыв, истечение сессии, перезагрузка клиента ... Мгновенно реагирует не только сервер, но и клиент. На клиенте, естественно, никаких таймеров или допзапросов - нужен только изначальный коннект. |
Цитата:
Спасибо ! Но я реализовал как предложил lowka - тестировал все работает как часы , может после будут проблемы - но пока нет ! Comet-технология я думаю тоже так реализована - но может и нет ! |
Цитата:
Больше того, он работает по схожему принципу. Вам знакомо понятие датаграма? Понятно что всё обернули красиво но что делать если число пользователей превысит 2байта допустимых открытых соединений? Или что делать в ситуации когда например у вас отключат свет в доме и на крыше потухнет свитч? Сервер подумает что клиента нет! А что будет если соединение восстановится? Сервер по прежнему будет думать что клиент мёртв! Ибо, коннект нужно инициировать первым клиенту ;) Короче, технология интересная но использовать нужно выборочно. :umnik2: |
| Часовой пояс GMT +4, время: 00:35. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.