Подскажите, оптимальна ли и эффективна следующая реализация чата:
1. Структура: имеется index.php, в нем в сайдбаре include chat.php. В сhat.php разметка чата, форма ввода сообщений, и include chat-messages.php. В chat-messages.php, соответственно, код PHP вывода сообщений из БД
2. Так же в chat.php ajax-запрос на обновление чата без перезагрузки страницы (url: 'check-chat.php',). Интервал обновления - пол секунды.
3. Выводится 100 последних сообщений
Возникают следующие вопросы:
1. Сильно ли эти запросы каждые пол секунды будут грузить БД?
2. Оптимальна ли данная реализация в целом?
Всем спасибо
З.Ы. только недавно начал разбираться в php, многого не знаю, поэтому не ругайте
Если это не продакшн, а скажем, учебно-развлекательный проект, то пойдет. Можно увеличить интервал до 5 сек, а в базе выбирать по времени больше времени последнего полученного сообщения, это сократит нагрузку. Время надо отсылать при запросе к серверу. Все прочитанные получателем (т.е. отосланные в ответ на аякс запрос) записи чата помечаются в отдельном поле в таблице(например `readed` = 1), и в дальнейшем не выбираются. В идеале переписать на сокеты, ибо аякс интервалы не лучший способ реализации.
Попробуй передавать ID последнего сообщения в чате и получать только те смс,которые больше последнего, а не 100 каждый раз
Поменяй формат на JSON, просто 2 вектора(массивы)-ники и сообщения.
пол секунды меняй на 5 секунд
и все
А лучше всего используй comet сервер, удобно и производительно, посмотри в сторону https://comet-server.com, я делал проект с ним, все отлично работает и реализуется просто, документация подробная, можно как SaaS сервис юзать или на свой сервак ставить. Все бесплатно :)
Вот пара примеров как использовать codemarks.ru/php/ispolzovanie-comet-servera-dlya-s...
Нет у вас система не оптимальна. Она вам базу положит на десятке пользователей онлайн (минимум 2 запрос к бд в секунду с одного человека, на 10 людях это уже 20 запросов в секунду)
Вот эти вопросы и ответы должны помочь