![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Проектування бази даних
Перш ніж перейти до частини PHP, потрібно спочатку поглянути на організацію даних чату в базі даних MySQL. Для нашого скрипта ми використовуємо дві таблиці. У таблиці webchat_users зберігається інформація про учасників чату. Таблиця має поля id, name, gravatar і last_activity. Поле name визначено як унікальне, таким чином запобігає використання імен, що дублюються в чаті. Іншою корисною властивістю поля з унікальним індексом є те, що запит на вставку даних завершиться з помилкою і властивість inserted_rows об'єкта MySQLi буде встановлено в значення 0, якщо спробувати вставити дублюючі рядки. У класі PHP Chat дане властивість буде активно використовуватися. Поле last_activity містить значення часу. Значення оновлюється кожні 15 секунд для кожного користувача. Поле також визначено як індекс, що дозволяє швидко видаляти неактивних користувачів (значення в поле last_activity більше 15 означає, що користувач паче не переглядає вікно чату). Таблиця webchat_lines містить записи в чаті. Зауважте, що зберігаємо ім'я автора і gravatar тут теж. Таке дублювання дозволяє відмовитися від використання витратної директиви join при запиті останніх записів - найбільш часто використовуваних в додатку. Визначення таблиць є в файлі tables.sql. Можна використовувати текст запитів для створення таблиць. Також, при установці чату на хост, потрібно поміняти установки в ajax.php на дані для з'єднання з базою MySQL. Клас DB - менеджер бази даних. Конструктор оголошений як private, таким чином, об'єкт не може бути створений поза межами класу, і ініціалізація можлива тільки з статичного методу init (). Він бере масив з параметрами з'єднання з MySQL і створює екземпляр класу, який міститься в статичної змінної self:: $ instance. Таким чином, забезпечується існування єдиного з'єднання з базою даних в конкретний момент часу. Інша частина класу реалізує комунікацію з базою даних, в основі якої лежить статичний метод query (). Це простий базовий клас. Його основне призначення - визначити конструктор, який отримує масив параметрів, але зберігає тільки ті, які визначені в класі. Клас ChatLine є похідним класом від ChatBase. Об'єкт даного класу можна легко створити за допомогою передачі конструктору масиву з текстом, ім'ям автора та елементом gravatar. Властивість класу gravatar містить хеш md5 email адреси. Воно потрібне для отримання користувацького аватара, відповідного emailадресою, з сайту gravatar.com. Даний клас також визначає метод save, який зберігає об'єкт в базі даних. Так як метод повертає об'єкт MySQLi, що міститься в класі DB, можете перевірити успішність завершення операції за допомогою властивості affected_rows. Клас має властивості name і gravatar (зверніть увагу на модифікатор доступу protected - властивості доступні в класі ChatBase, і ми можемо встановлювати їх значення в конструкторі). У класі визначено метод update (), який оновлює поле last_activity значенням поточного часу. Таким чином показується, що користувач тримає вікно з чатом відритим і його треба враховувати як автора в режимі онлайн. Цей код виконує всю роботу. В операторі switch в файлі ajax.php вибиралися дії, які відповідали методам даного класу. Кожен з цих методів повертає масив, який потім конвертується в об'єкт JSON за допомогою функції json_encode () (це відбувається внизу в файлі ajax.php). Коли користувач входить в систему, його ім'я і gravatar зберігаються як елементи масиву $ _SESSION і стають доступні в наступних запитах. jQuery відправляє запити getUsers () кожні 15 секунд. Використовуємо цей факт, щоб видалити репліки, які старше 5 хвилин і неактивних користувачів з бази даних. Потенційно можна було б видаляти дані записи в getChats, але цей запит надходить кожну секунду і додаткове навантаження може вплинути на продуктивність програми. У методі getChats () використовується функція gmdate виведення часу в форматі GMT. У клієнтської частини ми використовуємо годину і хвилину для установки в об'єкті JavaScript, а в результаті час відображається відповідно до часового поясу користувача. Спочатку треба створити базу даних за допомогою MS SQL Server 2005/2008. Для простоти використовується наступна база даних: Користувач: Містить інформацію про користувача. Учасники: буде зберігати користувачів, які увійшли / спілкуються в розділі чату.
|