On-line ли пользователь в чате?

darkwiz

Новичок
On-line ли пользователь в чате?

У меня такой вопрос. Вот завел я сессии когда пользователь вошел в чат.. А как оперативно можно узнать когда он ушел? (если не подсчитывать время последнего осавленного сообщения... )
 

Фанат

oncle terrible
Команда форума
о господи.
как перестал запрашивать новую информацию из чата - вот и ушёл
неужели так трудно сообразить?
 

darkwiz

Новичок
Хмм... ну до этого то я и сам догадался.... А как это осуществить?
 

darkwiz

Новичок
НУ я ж не буду писать в БД время просмотра сообщений пользователем!
 

AmadMike

Новичок
Ну так смотря какой у тебя чат и какие в нем принципы.
Вообще нет механизмов чтобы это сделать оперативно для обычного чата. Почитай форум, такие темы тут обсуждаются часто. Ждешь какое-то время, если пользователь не проявляет активности, то удаляешь его.
 

darkwiz

Новичок
Да.... это первое что мне на ум пришло! Но вот если пользователь просто смотрит сообщения.... А его тут как ни в чем не бывало выкидывает из чата - эт не дела...

-~{}~ 20.11.06 21:50:

А насчет механизмов... Думаю ставить постоянную загрузку... Цикл бесконечный ставить и Flush() естесно...
 

Фанат

oncle terrible
Команда форума
А его тут как ни в чем не бывало выкидывает из чата
с какой радости его выкинет-то?
А насчет механизмов... Думаю ставить постоянную загрузку...
то есть, чат ты ещё не написал, а как юзеров выводить - озаботился?

длать надо наоборот, вообще-то
 

darkwiz

Новичок
Автор оригинала: Фанат


то есть, чат ты ещё не написал, а как юзеров выводить - озаботился?

длать надо наоборот, вообще-то
я разрабатываю сначала алгоритм... Потом записываю его обычным языком, а только потом начинаю кодить. Меня так учили...

-~{}~ 20.11.06 22:04:

А то как будет организован чат у меня уже написано... в алгоритме.
 

WP

^_^
Бедный. Никто так не делает т.к. ничего серьезного так не напишешь.
 

iSlayter

Новичок
Автор оригинала: WP
Бедный. Никто так не делает т.к. ничего серьезного так не напишешь.
как всегда в своем репертуаре :D
а серьёзно - заморачиваться с обновлением нет смысла = почему бы тут аякс не использовать?
 

WP

^_^
iSlayter
> как всегда в своем репертуаре
Ы?
> а серьёзно - заморачиваться с обновлением нет смысла = почему бы тут аякс не использовать?
В построении чата есть несколько путей, а именно в организации "непрерывной" загрузки сообщений. Можно сделать просто set_time_limit(0) + flush() + запрос к бд каждую секунду. Такой чат сильно требователен к ресурсам, даже на десяти посетителях. Если рефрешить фрейм часто - тоже несладко, если даже 10 человек, это 10 запросов в секунду - нефиговая нагрузка. Поэтому при написании чата я пошел вот каким путем. Вход в чат организуется через обычную вебформу отправляющую данные в общий вебсервер (например Apache), и затем загружается страничка с чатом, она представляет собой два div'а overflow, т.е. появляется прокрутка как в фрейме. Один для сообщений, а справа поменьше - для пользователей. А внизу форма отправки сообщений. Каждая из этих сущностей взаимодействует с JS, который отправляет запросы своему httpd написанному на PHP: т.е. банально слушаем порт, парсим HTTP-запрос, делаем нужные операции с БД и шлем ответ в виде JSON, при этом запросы можно слать на обновление div'а с сообщениями каждую секунду и нагрузка будет минимальна даже на 1000 пользователях. Там еще используется кеширование, например шаблон генерирующий юзерлист не обновляется чаще раза в 5 секунд, и т.д.
Единственный минус данного метода в том что нужно договориться с хостером, и хостингзадвабакса не пойдет.
А Online ли пользователь узнать элементарно, у него флаг в таблице сессий. А робот проверяет каждые 10 секунд активен ли пользователь, поле last которое обновляется с каждым запросом меньше ли time() на 15 секунд. Вот и всё. А про бумажку забудь, ее надо в туалете использовать.
 
Сверху