Anderson
Завсегдатай
Зарегистрирован: 08.07.2006 Сообщения: 642 Откуда: localhost
|
|
|
|
Итак, изобрел (если такого еще не было ) я наконец новый механизм проверки "Who is online" для чатов (с обновлением каждые 10 секунд). Вот главный принцип.
1. На сайт вошел пользователь с каким-то именем/
2. В папке users/ создается файл с его именем, в который сыенарий записывает дату его входа + $timeout секунд -- "fwrite($f, time()+$timeout)" -- у себя я поставил $timeout равным 30.
3. Если файл существует, он перезаписывается. То есть, когда пользователь сидит в чате (пусть даже через dial-up), файл постоянно обновляется.
4. Если пользователь покинул сайт, и не заходит на него больше чем $timeout секунд, файл удаляется при входе следующего пользователя в чат.
Что делает мой сценарий (ему передано один параметр -- имя пользователя $username):
<?
// // открытие директории с именами
// открытие файла names/$username.txt, при существовании перезаписывание
// запись в файл -- fwrite($f, time()+30)
// удаление "устаревших" файлов в каталоге names/, то есть содержимое которых меньше вызова time() сейчас
// отображение совместимого каталога names/
?>
Вот и все. Ни сессий, ни "печенья", ни временных файлов. Вы, наверное, спросите: а в чате никого не будет, то есть
последний пользователь покинет чат, в каталоге users/ останеться "мусор"?
Нет проблем. Он будет удален при входе следующего пользователя, ничего страшного, если он будет там лежать некоторое время "просроченный"
И еще на заметку. Изменяйте $timeout на ваш рассудок. Например, если у вас будут посетители с одним АДСЛ, то смело ставьте $timeout равным 15. _________________ ArchLinux + Enlightenment 17 (E17) |
|