Длительный опрос PHP, без чрезмерного доступа к базе данных

Мне всегда нравилась идея длительных опросов; на моем сервере разработки я играл с различными системами уведомлений / новых сообщений, каждый из которых использовал javascript для подключения и «подождать» для своего рода ответа. У меня всегда была проблема со многими реализациями этого, все они включают повторный опрос mySQL-сервера для проверки новых строк.

Выделенный сервер для длительных запросов на опрос – это возможность, но кажется очень расточительным для непрерывного опроса (примерно каждые 3 секунды, как правило,) сервера базы данных для каждого клиента. Его огромная трата ресурсов для чего-то относительно незначащего.

Есть ли тестовый способ?

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

Вместо непрерывного опроса базы данных вы должны контролировать общую память. Когда что-то записывается в db (я предполагаю какую-то очередь сообщений), вы можете отметить событие через разделяемую память. Код прослушивания обнаружит это, и только затем установите соединение db для извлечения сообщения. Кроме того, вы можете использовать общую память, чтобы полностью заменить использование базы данных.

Ссылка на функции php-семафора и разделяемой памяти приведена здесь: http://uk.php.net/manual/en/ref.sem.php

Я бы использовал некоторый nosql для уведомления о появлении новых данных. В Redis есть паб / sub и блокирующий список .

Вы также можете использовать, например, memcache и создать новый ключ, когда данные будут доступны.

WebSockets

Когда он полностью поддерживается;)

кеш данных, мне нравится сервер Zend Server, он резко сократил вытягивание из базы данных

Всякий раз, когда вы вставляете или обновляете свою базу данных, создайте кэш для этого поля базы данных. Вы можете использовать любой простой кэш на основе PHP (http://hycus.com/2011/03/31/hcache-a-cache-system-for-php/).

Затем вы можете постоянно опробовать этот кеш, используя JQUERY.

Можно посмотреть, что флэш-ролик в фоновом режиме поддерживает непрерывное соединение с сервером с помощью сокетов. Java также поддерживает сокеты, поэтому также может быть Java-апплет, встроенный в вашу страницу.