Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Отловить disconnect клиента на сервере ! (http://www.flasher.ru/forum/showthread.php?t=126628)

avilov 24.06.2009 01:11

Отловить disconnect клиента на сервере !
 
Всем привет !

Много видел в темах что советуют для написания онлаин игр писать свой сервер на
c++

Я написал всой socket сервер на с++ , но тут появилась проблема как отловить на стороне сервера что клиент отключился например (отключился нет у клиента или еще что - то , порыв связи) вобщем разумного решения этой проблеме я не нашел !

Может кто сталкивался с такой проблемой ?

lowka 24.06.2009 03:23

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

avilov 24.06.2009 04:14

Цитата:

Сообщение от lowka (Сообщение 830285)
Можно сверять время приема последнего пакета от клиента и текущее время на сервере. Если разница между ними большего некоего допустимого времени ожидания ответа от клиента сервером, то клиент считается неактивным.

Как я понял - принцып таков , клиент например каждые 5 сек посылает сообщение - а я на сервере отлавливаю их и если в течении 5 сер например нет сообщения от клиента - клиент считается не активным .

Впринцыпи идея - нада все обдумать !

Если у кого будут еще предложения прошу высказыватся - или может уже кто на приктике реализовывал !

Добавлено через 33 часа 3 минуты
Вопрос еще актуален , кто еще как реализовывал подобную проблему ?

Foli 25.06.2009 14:11

Цитата:

Сообщение от lowka (Сообщение 830285)
Можно сверять время приема последнего пакета от клиента и текущее время на сервере. Если разница между ними большего некоего допустимого времени ожидания ответа от клиента сервером, то клиент считается неактивным.

В точку! :umnik2: Других решений нет!!!

IDmitry 29.06.2009 04:27

Ну да, конечно ... :)
А как же Comet-технология? Неплохо реализована в Tomcat 6, правда, до 16-ой версии были глюки с NIO, потом исправили (юзаю сейчас 19 релиз - все пучком).

Если рассматривать в данном контексте, то мгновенно реагирует не только на ошибку, но даже распознает дисконнект - таймаут, принудительный разрыв, истечение сессии, перезагрузка клиента ... Мгновенно реагирует не только сервер, но и клиент. На клиенте, естественно, никаких таймеров или допзапросов - нужен только изначальный коннект.

avilov 30.06.2009 00:18

Цитата:

Сообщение от IDmitry (Сообщение 831594)
Ну да, конечно ... :)
А как же Comet-технология? Неплохо реализована в Tomcat 6, правда, до 16-ой версии были глюки с NIO, потом исправили (юзаю сейчас 19 релиз - все пучком).

Если рассматривать в данном контексте, то мгновенно реагирует не только на ошибку, но даже распознает дисконнект - таймаут, принудительный разрыв, истечение сессии, перезагрузка клиента ... Мгновенно реагирует не только сервер, но и клиент. На клиенте, естественно, никаких таймеров или допзапросов - нужен только изначальный коннект.


Спасибо !

Но я реализовал как предложил lowka - тестировал все работает как часы , может после будут проблемы - но пока нет !

Comet-технология я думаю тоже так реализована - но может и нет !

Foli 30.06.2009 18:44

Цитата:

Сообщение от IDmitry (Сообщение 831594)
Ну да, конечно ... :)
А как же Comet-технология?

Смотря для чего использовать Comet. :umnik2:
Больше того, он работает по схожему принципу. Вам знакомо понятие датаграма?
Понятно что всё обернули красиво но что делать если число пользователей превысит 2байта допустимых открытых соединений?

Или что делать в ситуации когда например у вас отключат свет в доме и на крыше потухнет свитч? Сервер подумает что клиента нет! А что будет если соединение восстановится? Сервер по прежнему будет думать что клиент мёртв! Ибо, коннект нужно инициировать первым клиенту ;)

Короче, технология интересная но использовать нужно выборочно. :umnik2:


Часовой пояс GMT +4, время: 00:35.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.