Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Философия программирования > Мессенджер + http сервер |
Автор: wendstor 25.1.2012, 11:13 |
Начил писать программу похожую на мессанджер, но с расширенным функционалом, но вот возник вопрос о реализации обновления статуса акаунта на сервере. Дело в том что программно можно реализовать отсылку данных на сервер о статусе акаунта (т.е. online, offline), а в случае если система ушла BSOD или свет "вырубили", то тогда на сервере и будет статус user'a online. Принцип реализации такой же как на примере ICQ, Skype. Так вот хочу реализовать связку ПО+Apache+MySql. Вообще, какими спосабами можно выкрутиться из данной ситуации? Если кто сталкивался с подобной реализацией то пишите: ICQ 551911966 Skype Wendstor1982 |
Автор: newbee 25.1.2012, 11:36 |
Через некоторое время сокет отвалится - реагируй на это и меняй статус. Еще можно периодически слать свои специальные пакеты (аля ping-request pong-response) и, если в течение некоторого интервала времени клиент не отвечает, принудительно закрывать соединение и менять статус. |
Автор: wendstor 25.1.2012, 11:59 | ||
так это всё понятно с реализацией в программе. Наверное не так объяснил, и так будет программа на Delphi она подключаеться к http серверу, устанавливает статус на http серваке (статус заноситься в таблицу MySQL), при нормальной работе подключения, отключения я смогу на http сервер послать свой статус, но вот как быть если произошли "траблы" на стороне клиента, статус клиента так и останиться в таблице MySQL "активен" вот мне нужно более рациональное решение по слежению за статусом на стороне http сервера. Вот не знаю как это решить, да и с минимальными нагрузками на сам http сервер... |
Автор: newbee 25.1.2012, 13:10 |
Я заголовок не читала. Если у тебя http, то общение идет в одни ворота (сервер), то есть опрашивать клиента нельзя. Значит на стороне сервера нужно делать систему мониторинга клиентов: если клиент не проявляет активность в течение N секунд, производить процесс отключения (смена статуса в БД и наверное еще какие-то сопутствующие манипуляции). А чтобы сервер не отключал живой, но бездействующий клиент, клиент должен следить за своей активностью и, если за n<<N секунд ничего не отправлял, бросать служебный пакет "я живой". Ну и разумеется примерно раз в ~n секунд сервер должен выполнять процесс мониторинга. В качестве N и n я бы выбрала 15 и 5 минут соответствуенно, дополнительная нагрузка на сервер и сеть ничтожны. |