как реализовать отправку сервера, когда есть обновление в базе данных mysql?

ситуация, с которой я сталкиваюсь:

у меня есть веб-приложение php+mysql. несколько пользователей совместно используют ресурсы в одной базе данных. я хочу реализовать функцию, при которой всякий раз, когда происходит изменение записей базы данных (создание, обновление или удаление), другие пользователи будут немедленно уведомлены.

Я подумываю использовать движок ajax push (APE), но не уверен, какова общая картина.

(1) это что-то вроде того, что мне нужен скрипт, постоянно проверяющий временные метки last_update и отправляющий уведомления клиенту при обнаружении нового изменения?

OR

(2) каждый раз после выполнения какой-либо операции с таблицей базы данных отправлять уведомление клиентам, предлагая им перезагрузить данные?

какой из них лучше или какие-либо другие предложения о том, как это реализовать?

заранее спасибо!


person Yang    schedule 15.02.2011    source источник
comment
Это зависит от того, нужно ли вам разрешать какие-либо конфликты в результате того, что они пытаются обновить устаревшие данные. Если это так, вам может потребоваться аннулировать их сеанс и каким-то образом потребовать, чтобы они получили свежие данные. При этом вы должны иметь возможность обновлять данные для них, если вы установите то, что вы описали в пункте (1) выше, установив интервал опроса для службы, которая предоставляет статус того, были ли внесены изменения. Если это возвращает другую контрольную сумму, хэш, максимальный ключ или метку времени последнего изменения, например, вы знаете, что нужно получить новые данные.   -  person philwinkle    schedule 15.02.2011


Ответы (2)


Ваш лучший вариант — № 2, когда вы записываете в базу данных, когда происходит ваше изменение, то есть когда вы должны нажать.

class DatabaseModel
{
    ...

    function save($data)
    {
        ... // your db query

        after_save();
    }

    function after_save()
    {
        // push changes out using some other object 
        // e.g. MyPushClass::something_changed($this);
    }
}
person esfourteen    schedule 15.02.2011

Для этого вы можете использовать библиотеку comet.

http://ajaxian.com/archives/comet-with-php

http://www.zeitoun.net/articles/comet_and_php/start

person Nik    schedule 15.02.2011