Пишем свой чат на PHP
Задался я мыслью, написать подобие чата. как и все великое, начнется это с простых вещей....
- чат будет на фреймах -
- главный, с сообщениями
- ввод, где будет вводится текст
- список ников, понятно
- и..фрейм "драйвер" всего этого дела )
- будет юзать mySQL, потому как очень просто все тогда получится
- в чате не будет регистрации, а следовательно админов и т.д., для простоты реализации и понятности...
UML диаграмма последовательности
Итак, начнем.
заглав пага у нас будет index.html куда и будет попадать юзер при заходе на chat.test1.ru допустим ):
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <html> <frameset rows="0,50,*" onunload='alert( "выход" );'> <frame noresize frameborder="0" name="dummy" src="dummy.php" > <frame noresize frameborder="0" name="chat" src="input.php" > <frameset cols="200,*" onunload='alert( "выход" );'> <frame noresize frameborder="0" name="nicklist" src="users.php" > <frame noresize frameborder="0" name="main" src="main.php" > </frameset> </frameset> </html>
обьясняю - это страница фреймсет - набор фреймов,
- первый фрейм, с нулевой высотой - "драйвер"...он будет перегружатся каждые...ну скажем 10 секунд, и проверять новые сообщения...пользователей убирать по тайм ауту и т.д.
- второй фрейм ссылается на input.php..простенький скрипт, который будет принимать мессаги от юзера и пиндюрить их в БД нашу (кстати...)
- третий - список ников...с js ссылками на вставку в input поле
- ну и четвертый - где будут выводится все сообщения....
<
p>для чата нам понадобятся всего две таблицы (да, да ))):
CREATE TABLE `chat` ( `userid` int(10) unsigned NOT NULL default '0', `message` varchar(255) NOT NULL default '0', `date` int(10) unsigned NOT NULL default '0', KEY `userid` (`userid`) ) TYPE=MyISAM; CREATE TABLE `user` ( `username` varchar(50) default NULL, `userid` int(10) unsigned NOT NULL auto_increment, `lastactivity` int(10) unsigned NOT NULL default '0', `lastupdate` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`userid`) ) TYPE=MyISAM;
тут кажется должно быть просто:
chat - три поля:
- номер юзера (хотя надо было бы заносить имя а не ссылку на таблицу юзеров, так как при выходе стирается запись из user на которую будет ссылатся chat, ну да не страшно....
- сам текст сообщения
- и время его...
user
- имя,
- номер,
- последняя активность (для определения диссконнекта)
- последний апдейт сообщений (чтобы проверять на наличие новых)
Comments
таймаут
немного не понял принцип работы таймаута
Технологии
Технологии ускакали далеко вперед за эти года, статья была написана в 2004 году, а сам скрипт в 2003 в качестве прототипа.
Если имелся ввиду таймаут на удаление пользователей, то принцип таймаута был простой -
При очередном обновлении dummy фрейма и дергания dummy.php, вычислялась точка времени, находящаяся в прошлом на 5 минут от текущего момента.
$now = mktime() - 5 * 60;и далее делалась попытка удалить из таблиц сообщений и пользователей все что старше этой метки. Если такие записи были, то:Поставил этот чат у себя на
Поставил этот чат у себя на компе. К сожалению не работает автообновление окна чата и списка юзеров. Окно чата обновляется если только что-либо написать в чат. Если юзер ничего не пишет, то он не видит, что написали другие.
Список юзеров обновляется - только если вручную обновить фрейм.
да эм. славный 2003! :)
С Новым Годом, россияне.
Ну и все остальные хорошие люди дважды.
А хорошие россияне - трижды!
Спасибо!!
Спасибо огромное))) Очень хорошо и подробно все описано теперь все понятно а то по книгам ничего не понятно видимо автор непутевый или я тупил)))... побольшебы таких скриптов с подробным описанием его создания))))
Post new comment