Высокочастотная перегрузка сна Ajax и MySQL - PullRequest
4 голосов
/ 16 февраля 2010

В настоящее время я работаю над легким php-фреймворком для использования с некоторым ajax с высоким запросом для моего сайта, и столкнулся с интересной проблемой, которая поставила меня в тупик. Ajax предназначен для серии уведомлений, поэтому javascript отправляет ajax-запрос на получение новой информации каждые 30 секунд. Этот ajax активен на каждой странице всего сайта, поэтому я понимаю, что он вызывает много запросов, так как несколько сотен пользователей просматривают сайт в любой момент, многие с несколькими открытыми окнами.

Синтаксис мудрый, все идеально. Проблема в том, что когда я активировал ajax для своего сообщества, в базе данных MySQL накапливаются 30-40 команд SLEEP. Кажется, что все они игнорируют установленное время ожидания 10 секунд. Это влияет на производительность всего сайта в результате.

Насколько я понимаю, оставшиеся бездействующие команды являются результатом соединения, которое не было закрыто. Я использую объектно-ориентированный класс MySQLi и расширил его несколькими собственными функциями. Все по учебнику и перепроверено с документацией, и я удостоверился, что каждый маленький кусочек класса MySQLi закрыт и выпущен.

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

1 Ответ

1 голос
/ 16 февраля 2010

Пробовали ли вы использовать подход «push» по сравнению с вашим текущим подходом «pull / polling»? Посмотрите на комету:

Однако есть некоторые недостатки, главным из которых является поддержание открытого соединения, а некоторые браузеры ограничивают количество поддерживаемых соединений. Следующая статья рассказывает о плюсах и минусах использования Comet и предлагает подход гибридного опроса:

Вот вопрос стекопотока, который также говорит о комете:


...