Добейтесь пост блокировки системы, как в Wordpress - PullRequest
0 голосов
/ 25 октября 2018

Я намеревался создать систему блокировки сообщений, чтобы пользователь B не мог редактировать сообщение X, когда пользователь A редактирует его.Я читал, что Wordpress имеет аналогичную функцию.Я прочесал код, однако я не могу понять одну вещь.Как они справляются с удалением почтовой блокировки, когда пользователь выходит из браузера или напрямую уходит со страницы?

Кажется, Wordpress использует то, что они называют «Heartbeat API», который представляет собой простой серверный опросчик, который взаимодействует сadmin-ajax.php и обрабатывает такие вещи, как добавление / удаление почтовых блокировок.

Итак, я наблюдал несколько сценариев:

  1. Пользователь остается на странице (admin-ajax.php срабатывает через заданный интервал, после блокировки возобновляется)
  2. Пользователь переходит со страницы на другую страницу WordPress (admin-ajax.php срабатывает, после блокировки снимается)

    3.Пользователь переходит на другой веб-сайт непосредственно со страницы текущего веб-сайта (admin-ajax.php не сработал, однако блокировка записи снята)

В общих чертах, какони достигают 3-го?

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

1 Ответ

0 голосов
/ 25 октября 2018

В современных браузерах у нас есть navigator.sendBeacon(), который будет напрямую уведомлять сервер о том, что пользователь покидает страницу, однако, поскольку это на стороне клиента, это не на 100% надежно (например, если браузер нене поддерживает это, внезапное отключение сети или электропитания и т. д.).Вот почему это необходимо делать и на стороне сервера, если вы хотите, чтобы он был надежным.

Как работает API тактового импульса, браузер пользователя отправляет «тактовый сигнал» или пинг на сервер, сообщая ему, чтоони все еще там, поэтому, если пользователь покидает страницу, пульс не принимается, поэтому пользователь покинул страницу.Это будет отслеживаться с помощью задания cron, которое выполняется с заданным интервалом.Поэтому любые сообщения, которые в данный момент редактируются данным пользователем и не получили пульс более одного интервала, могут быть помечены как не редактируемые.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...