Демон блокировок с API для PHP (или любым простым API)?
Порекомендуйте, пожалуйста, какой-нибудь простой популярный демон поддержки блокировок, который ждет соединений от клиентов по TCP и обрабатывает запросы на эксклюзивные блокировки.
Мне нужно синхронизировать параллельные PHP-процессы на НЕСКОЛЬКИХ машинах. Например, первая машина может сказать «я блокирую идентификатор 'abcd', начиная с текущего момента и до моей смерти/дисконнекта». И если вторая машина после этого скажет «заблокировать 'abcd'», то ее запрос «подвиснет» до тех пор, пока первая машина не освободит идентификатор 'abcd'. Важно, что идентификатор также должен автоматом освобождаться, если процесс неожиданно умирает и не имеет возможность сказать демону блокировок, что он освобождает идентификатор (это может работать, например, через отслеживание дисконнекта на стороне демона — ведь когда клиент умирает, соединение с демоном рвется).
Я смотрел в сторону memcached add(), однако он не совсем подходит, потому что а) не может обрабатывать внезапные дисконнекты (связь с сервером хоть и держится, но с точки зрения семантики блокировки ничего не значит) и б) мне не подходит схема освобождения блокировки просто по тайм-ауту неактивности процесса, потому что процесс может работать непредсказуемое время.
Нужен именно демон, который умеет работать с постоянными соединениями и обрабатывает их разрыв как сигнал к освобождению блокировки.
В сетевых технологиях тахнологиях очень широко используется механизм keepalive. Если от партнера нет keeplive пакета в течении X секунд, то считаем что партнер мертв
Всетаки лучше делать через keepalive, а не оринтироваться на tcp сессию. Если по сесии никаких пакетов не проходит, то она может висеть очень долгое время в открытом состоянии. Таймауты там часами исчисляются.