![]() |
Чат PHP+Flash+MySQL: как опеределить наличие пользователя в чате?
Привет!
Собственно, в заголовке и весь вопрос, но немного поясню: Есть чат, он вполне работает, но когда пользователь внезапно отключается от чата или от сети, у меня его имя продолжает висеть в числе пользователей. Сначала я хотел использовать socket на PHP, но из-за недостаточности опыта в работе с сокетами, он у меня получился очень сырой и жутко глючный. Пришлось отказаться, ума не хватило. Может быть использовать XMLSocket? Но тогда как? Я даже не знаю в каком направлении копать... Может ли кто-нибудь помочь в таком вопросе? Как сразу же после отключения пользователя (т.е. без задержек), в том числе и внезапного отключения, определить что его уже нет? Спасибо. |
вообще такое делают по последней активности, но там не избежать задержек...
|
Bright, а может заставить клиента постоянно посылать на сервер небольшое сообщение о присутствии. А сервер, если не получит через заданный промежуток сообщение, будет уверен, что клиента уже нет.
Не будет ли это большой нагрузкой на сервер? И вообще в плане надежности - такое возможно или нет? И про последнюю активность - можно подробнее? Кстати, пробовал ковырять FlashChat - оказалось, что там есть то, что мне нужно, но настолько профессионально написано... Сами знаете какого это - копаться в чужом коде. Получается, что все-таки не только по последней активности - есть и еще способы. |
большая-небольшая, но это пустая нагрузка на сервер...
последняя активность - время последнего действия (вход/выход, сообщение, просмотр инфы и тд...) юзером. Если юзер в течении минуты-двух ничего не делает его выкидывают из чата. насчет исходников - можно и на флэшере поискать, такие темы были, там были исходники. может, что попроще найдется. |
Каа, а насколько сильно ты удивишься, если узнаешь, что пользователь "в чате" находится крайне малое время, примерно такое, какое нужно серверу чтобы сгенерировать ответ "Ок" ?
И отключение пользователя - если, конечно, речь не идет о клиент-серверном приложении, а о встроенном в браузер флэш-объекте - происходит в тот момент, когда пользователь (его браузер) отослал на сервер "Connection: close", то есть каждый клик мышой на ссылке и на каждый вызов getURL() и им подобных. |
Skubent,
Цитата:
Да, я понимаю про "крайне малое время" и совсем не удивился этому. Цитата:
Жаль, но я так и не получил ответа на вопрос. Неужели никто не сталкивался с этим вопросом? Кто-нибудь нашел решение? Bright, Цитата:
|
Забудь про сбой питания. Шанс того, что питание отпадет именно в тот момент, в который в сеть уходит пакет с куском заголовка сообщения равен нулю. Можешь поэкспериментировать, торкая в ресет при общении с каким либо сервером.
А закрытие соединения отправляется при КАЖДОМ запросе от пользователя. При перезагрузке соединения таки закрываются. А по твоему вопросу - выбираешь таймаут (скажем, три минуты), пишешь в отдельную таблицу время последнего действия каждого пользователя. Выкидываешь из чата всех, у кого время последнего действия < (текущее время - таймаут). |
Хм... Может быть...
В исходниках нет? могу еще у себя посмотреть. |
| Часовой пояс GMT +4, время: 23:06. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.