Пишем свой чат на PHP

Задался я мыслью, написать подобие чата. как и все великое, начнется это с простых вещей....

  1. чат будет на фреймах -
    • главный, с сообщениями
    • ввод, где будет вводится текст
    • список ников, понятно
    • и..фрейм "драйвер" всего этого дела )
  2. будет юзать mySQL, потому как очень просто все тогда получится
  3. в чате не будет регистрации, а следовательно админов и т.д., для простоты реализации и понятности...

UML диаграмма последовательности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>

обьясняю - это страница фреймсет - набор фреймов,

  1. первый фрейм, с нулевой высотой - "драйвер"...он будет перегружатся каждые...ну скажем 10 секунд, и проверять новые сообщения...пользователей убирать по тайм ауту и т.д.
  2. второй фрейм ссылается на input.php..простенький скрипт, который будет принимать мессаги от юзера и пиндюрить их в БД нашу (кстати...)
  3. третий - список ников...с js ссылками на вставку в input поле
  4. ну и четвертый - где будут выводится все сообщения....


<

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 - три поля:

  1. номер юзера (хотя надо было бы заносить имя а не ссылку на таблицу юзеров, так как при выходе стирается запись из user на которую будет ссылатся chat, ну да не страшно....
  2. сам текст сообщения
  3. и время его...

user

  • имя,
  • номер,
  • последняя активность (для определения диссконнекта)
  • последний апдейт сообщений (чтобы проверять на наличие новых)

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

таймаут

немного не понял принцип работы таймаута

Технологии

аватар: Vaulter

Технологии ускакали далеко вперед за эти года, статья была написана в 2004 году, а сам скрипт в 2003 в качестве прототипа.

Если имелся ввиду таймаут на удаление пользователей, то принцип таймаута был простой -
При очередном обновлении dummy фрейма и дергания dummy.php, вычислялась точка времени, находящаяся в прошлом на 5 минут от текущего момента.
$now = mktime() - 5 * 60; и далее делалась попытка удалить из таблиц сообщений и пользователей все что старше этой метки. Если такие записи были, то:

 if( mysql_affected_rows() ) {
        echo setlocation( 'nicklist', 0, 'users.php' );//если есть удаленные записи то обновить ник лист
    }

Поставил этот чат у себя на

Поставил этот чат у себя на компе. К сожалению не работает автообновление окна чата и списка юзеров. Окно чата обновляется если только что-либо написать в чат. Если юзер ничего не пишет, то он не видит, что написали другие.
Список юзеров обновляется - только если вручную обновить фрейм.

да эм. славный 2003! :)

аватар: Vaulter

С Новым Годом, россияне.
Ну и все остальные хорошие люди дважды.
А хорошие россияне - трижды!

Спасибо!!

Спасибо огромное))) Очень хорошо и подробно все описано теперь все понятно а то по книгам ничего не понятно видимо автор непутевый или я тупил)))... побольшебы таких скриптов с подробным описанием его создания))))

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <p><a> <em> <strong> <b> <cite> <q> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <h2><h3> <abbr>
  • Строки и параграфы переносятся автоматически.
  • Images can be added to this post.
  • Mark language-dependent sections with == lc == where lc (or lc-xx) is a language code, other or all.
  • Links to specified hosts will have a rel="nofollow" added to them.

Подробнее о форматировании

CAPTCHA
Кто (или что) ты
Image CAPTCHA
Enter the characters shown in the image.