Пишем свой чат на 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

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

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

таймаут

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

Технологии

Vaulter's picture

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

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

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

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

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

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

Vaulter's picture

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

Спасибо!!

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

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <p><a> <em> <strong> <b> <cite> <q> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <h2><h3> <abbr>
  • Lines and paragraphs break automatically.
  • 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.

More information about formatting options

CAPTCHA
who are you
Image CAPTCHA
Enter the characters shown in the image.