Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Программирование > PHP

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 05.10.2002, 08:49
Dentel вне форума Посмотреть профиль Отправить личное сообщение для Dentel Найти все сообщения от Dentel
  № 1  
Dentel

Регистрация: Aug 2002
Адрес: Норильск, в 2003 Питер
Сообщений: 5
Question Chat

Кто-нибудь, помогите!!! Подскажите сайт, на котором есть подробное описание создания собственного ЧАТА.

Старый 06.10.2002, 23:06
DeepDiver вне форума Посмотреть профиль Отправить личное сообщение для DeepDiver Найти все сообщения от DeepDiver
  № 2  
DeepDiver

Регистрация: Oct 2000
Адрес: Подмосковье
Сообщений: 637
Отправить сообщение для DeepDiver с помощью ICQ
Подробно описать не могу - сил нет уже, но общую концепцию могу подсказать:

1. Использется технология семафоров и разделяемой памяти (т.е. такой памяти, которая доступна всем желающим процессам, кто знает соответствующий идентификатор)
В ПХП это функции

для разделяемой памяти:

shm_attach()
shm_detach()
shm_remove()
shm_get_var()
shm_put_var()
shm_remove_var()

для семафоров
sem_get()
sem_acquire()
sem_release()
sem_remove()

2. Идея такова:
При запуске сервера чата:
а) создается блок разделяемой памяти с известным ключом

б) создается семафор доступа к разделяемой памяти с известным ключом

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

г) в разделяемой памяти создается порядковый массив с сообщениями. (с известным ключом). Размер массива, ессесно, ограничен. Думаю сообщения 20 хватит с лихвой. Этот массив необходим для того, чтобы вывести новопришедшему юзверю некоторую предысторию базара, ну и просто небольшой кэш всегда полезен.

СОВЕТ: Все ключи и функции работы с памятью (низкоуровневые: инициализация, подключение, отключение, уничтожение, подключение семафора, убиение семафора, выставление семафора и сброс семафора; высокоуровневые: инициализация массивов, добавление сообщений и чтение сообщений, пришедших после указанного времени) вынести в отдельную библиотеку, которую будут использовать сервер чата и его клиенты.

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

4. Клиент представляет собой скрипт, который через определенные промежутки времени опрашивает массив сообщений, и выводит те сообщения, которые были записаны после последней проверки массива. При запуске скрипта надо установить set_time_limit(0) ( чтобы скрипт не обрубился после 30 сек) и ob_implicit_flush() (чтобы вывод скрипта сразу передавался юзверю в браузер, а не буфер)

5. При добавлении нового сообщения размер массива сообщения сверяется с максимальным, и , если макс. длина достигнута, вызывается array_shift() для удаления наиболее старого сообщения. Новое сообщение дописывается в конец. Вместе с сообщением записывается текущее время в МИКРОСЕКУНДАХ!!!! (см. microtime() и немного пошевели мозгами, как из него сделать Integer). Микросекунды требуются для того, чтобы сообщения, пришедшие в одну и ту же секунду выводились все вместе. И наче выведется только первое сообщение. (В общем частота дискретизации больше, что есть good)

6. Собсно все.

Чат основанный на этой системе был реализован мной (тестовая версия, дяльше не хватило времени). На тестах выдавал производительность до 30 сообщений в секунду (и это не предел) на Pentium 200 MMX под Slackware Linux 7.0

Кстати, такой чат будет работать только на *nix серверах, т.к. функции работы с разделяемой памятью реализованы только под них.

Плюсы:
+ скорость (нет обращения к диску, БД)
+ Низкие требования к ресурсам (100 кб памяти под сообщения и список юзеров)
+ юзабилити (нет обновления страницы, сообщения идут одним нескончаемым потоком)
+ возможность писать клиенты как на ПХП так и на ПЕРЛ, так и на Си. Причем работать могут совместно все три вида, проблема только в представлении данных в разделяемой памяти. ПХП записывает туда массивы используя serialize()

Минусы:
- Требуется некоторая осторожность при работе с разделяемой памятью (знать, как использовать семафоры)

Мою тестовую версию можно глянуть на
http://portal.battleaxe.ru/chat
Если при входе в чат выдает ошибки, значит сервер не запущен. Для запуска зайти на
http://portal.battleaxe.ru/chat/admin
и сделать Start Server

Удачи
__________________
Не ошибается то, что не работает. (с) Windows

Создать новую тему   Часовой пояс GMT +4, время: 12:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:59.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.