Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > Мессенджер + 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
Цитата(newbee @ 25.1.2012,  11:36)
Через некоторое время сокет отвалится - реагируй на это и меняй статус. Еще можно периодически слать свои специальные пакеты (аля ping-request pong-response) и, если в течение некоторого интервала времени клиент не отвечает, принудительно закрывать соединение и менять статус.

так это всё понятно с реализацией в программе. Наверное не так объяснил, и так будет программа на Delphi она подключаеться к http серверу, устанавливает статус на http серваке (статус заноситься в таблицу MySQL), при нормальной работе подключения, отключения я смогу на http сервер послать свой статус, но вот как быть если произошли "траблы" на стороне клиента, статус клиента так и останиться в таблице MySQL "активен" вот мне нужно более рациональное решение по слежению за статусом на стороне http сервера. Вот не знаю как это решить, да и с минимальными нагрузками на сам http сервер...

Автор: newbee 25.1.2012, 13:10
Я заголовок не читала. Если у тебя http, то общение идет в одни ворота (сервер), то есть опрашивать клиента нельзя. Значит на стороне сервера нужно делать систему мониторинга клиентов: если клиент не проявляет активность в течение N секунд, производить процесс отключения (смена статуса в БД и наверное еще какие-то сопутствующие манипуляции). А чтобы сервер не отключал живой, но бездействующий клиент, клиент должен следить за своей активностью и, если за n<<N секунд ничего не отправлял, бросать служебный пакет "я живой". Ну и разумеется примерно раз в ~n секунд сервер должен выполнять процесс мониторинга.

В качестве N и n я бы выбрала 15 и 5 минут соответствуенно, дополнительная нагрузка на сервер и сеть ничтожны.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)