Привет всем. Я уже задавал вопрос в php но там решение было не самое оптимальное. может быть кто-нибудь знаком с Node.js. И поможет ли она в этом случаее? Задача: Есть сайт, в нем страницы для редактирования, когда один из пользователей зашёл на определённую страницу, то она становится недоступна для редактирования и просмотра другим пользователям. Если он вышел или закрыл браузер то через определённый тай-маут (1 минута например) не действия, страница снова свободна для просмотра и редактирования. Думал использовать setInterval c отправкой запроса у Ajax это не самый лучший способ . Когда он отсылает запрос то в этот момент недоступны другие скрипты, конечно не всегда пользователь может попасть на это, но всё равно. Гуглил нашёл в одном посте использовать Node.js, но точно не уверен поможет ли он в этом или нет.
Ну сейчас у меня такая ситуация, стоит календарь и прочие скрипты, вот когда я пытаюсь вызвать даже календарь и в этот момент срабатывает функция setInterval то календарь просто не запускается. Хочется оптимального решения для это задачи. Может у кого есть мысли в как лучше решить?
значит это не AJAX запрос. буква А в аяксе означает асинхронный, он не будет дожидаться окончания вызова и продолжит работу. а уже пришедший ответ будет обрабатываться соответствующим колбэком (если конечно вы его прописали).
А вообще такой вариант с отсылкой INSERT'а каждые 30 секунд в базу с временем например 2013-03-15 10:00:00 и поставить скрипт выполнятся cron'ом с проверкой если у id страницы различие больше на 45 секунд, то делать статус свободной для чтения и редактирования? Запросы не загнут сервак? сидит сто-триста человек на страницах и отсылается каждые 30 секнуд INSERT.
да зачем же? пользователь нажал на ссылку ведущую к редактированию документа. запускается сценарий генерирующий страницу редактирования документа. при этом делается запрос Апдейт-установи-меня-если-пусто-и-обнови-маркер-времени. Далее смотрим ответ от сервера - если изменилась одна строка то либо мы монополисты и обновилось время, либо документ свободен и мы стали монополистами и обновили время. Иначе вернется ноль строк и мы продолжим в режиме "ТОЛЬКО ЧТЕНИЕ". далее режим "МОНОПОЛЬНО". каждую минуту мы отсылаем запрос к бэкэнду, который делает "Апдейт-мой-маркер-времени". таким образом мы продлеваем свое время редактирования. выход из режима "МОНОПОЛЬНО". проверяем являемся ли мы монополистами. если да - обновляем содержимое документа. если нет - не дадим записать изменения во избежание коллизий. и в любом случае удаляем свой идентификатор из поля монополизма. документ свободен. режим "ТОЛЬКО ЧТЕНИЕ". мы можем периодически запрашивать кто монополист и если освободилось - занять это место и перезагрузить себя но уже в режиме "МОНОПОЛЬНО" то есть дать возможность редактировать. отлов вылета. по крону чистим идентификаторы монополистов для всех документов, метка которых старше двух минут. мало ли что там случилось что пользовательский браузер за две минуты не обновил токен. он же не виноват. а вот по прошествии двух и более минут - извиняйте, "лечим" систему блокировок. то есть все сводится к двум полям в таблице документов - идентификатору монополиста и метке последнего изменения. одному бэкэнду установки/проверки меток и одному крон-сценарию регенерации системы. его кстати можно и в бэкэнд установки/проверки грамотно затолкать.