Я сделал многопользовательское приложение, в котором, если два пользователя открывают одну и ту же страницу редактирования, и в то же время оба пользователя вводят данные в форме, будут данные о конфликтах, поэтому мне нужно решение, например, если один пользователь откроет конкретную страницу редактирования, а затем все остальные пользовательские блоки в течение некоторого времени и вызывать сообщение им, как «другой пользователь редактирует ту же страницу ….»
Лучший и простой способ сделать это – сохранить живую связь между веб-сайтом и пользователем редактирования после того, как он нажмет на редактирование.
Итак, основные шаги:
1) клики пользователей редактируются.
2) инициировать соединение ajax или websocket с этим пользователем, чтобы сообщить серверу, что файл все еще редактируется
3) если пользователь закрывается вручную или просто покидает веб-сайт, имеет некоторую логику для решения этой проблемы на стороне сервера
4) прибыль.
Постоянный вызов ajax на сервер (например, приложение чата) может обновить столбец «time_last_edited», если этот столбец, скажем, более 10 секунд, файл безопасен для редактирования, иначе это означает, что кто-то все еще его редактирует.
Может быть,
вы можете добавить два столбца в свою базу данных «open» и «time»
Установите «open» на «true» или «false», если кто-то его редактирует. Также установите метку времени в столбце «время». Заменяйте временную метку каждые столько секунд, пока происходит редактирование.
Если кто-то другой откроет его, отметьте столбец «open» и «true», подсчитайте время, прошедшее от столбца «время». Если это закончится через определенное время (скажем, 2 или 3 минуты), предположите, что другой пользователь больше не редактирует и разрешает этому пользователю редактировать.
Чтобы все было ясно,
Опция 1:
Вариант 2:
Дайте контенту модифицированное время. Перед отправкой нового содержимого проверьте, что время такое же, как и раньше. Если он отличается, содержимое изменилось, и пользователь должен быть проинформирован.
Получается вокруг большинства случаев.
Укажите поле в таблице, например, Page_status, и установите его как заблокированное, если пользователь откроет его для редактирования. и установите его для разблокировки, если редактирование завершено. И каждый раз проверяйте статус, прежде чем разрешать каждому пользователю редактировать.
Если пользователь закрывает страницу без редактирования. затем выполните сеанс для каждого пользователя и установите ограничение по времени, и если сеанс закончится, установите статус для разблокировки.
Для этого вам нужно держать флаг в таблице, если вы имеете имя таблицы «userdetails» с такими столбцами, как имя, мобильный, адрес электронной почты, так что теперь вы добавляете еще два имени столбца
inused with datatype TINYINT со значением по умолчанию 0 inuseddatetime с datatype datetime со значением по умолчанию NULL
Таким образом, как только конкретный пользователь откроет детали для редактирования, обновит inused column до 1 и inuseddatetime столбец с этой датой и временем в currendt
Таким образом, другой пользователь откроет такую же деталь для редактирования, и если столбец имеет значение 1, отобразите приглашение.
Чтобы снова изменить 1 на 0, когда первый пользователь нажал кнопку «Отправить», снова обновить использованный столбец до 0 и inuseddatetime столбец до нуля
В некоторых случаях, если пользователь не нажимает кнопку «Отправить» и не оставляет страницу таким образом, чтобы избежать такого условия, вы можете написать задание cron на сервере, которое будет проверять столбец useduseddatetime и будет обновлять используемый столбец до 0 для столбца, которые являются идеальными с последних 10 минут или 5 минут