Обмен сообщениями в стиле кометы: как реализовать серверную часть без опроса? - PullRequest
1 голос
/ 18 августа 2010

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

Но мне интересно, как лучше реализовать серверную часть в PHP. Сообщения / сообщения будут храниться в MySQL, и возникает вопрос: после записи нового сообщения в базу данных, как я могу уведомить все ожидающие запросы, что для них доступны данные без с использованием опроса? Опрос будет работать, но это уродливо и тратит ресурсы, поэтому я не хочу:

while (timeout not reached) {
    if ($database->has_changes())
        break;
    sleep(1);
}
handle_changes_if_any();

Есть ли какая-то особенность MySQL, которая мне здесь поможет? Поможет ли какой-нибудь IPC? Сервер работает Apache.

1 Ответ

0 голосов
/ 18 августа 2010

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

Другой вариант - использовать кометный сервер, такой как Meteor . При таком подходе ваш PHP-скрипт может уведомлять сервер комет о новых сообщениях, и подключенные клиенты будут получать обновления. Тогда вам остается только написать JavaScript для отображения обновления пользователю.

...