Я ищу руководство по вопросу, который едва могу понять, как есть. У меня есть содержимое файла .txt, загруженного через readfile('stories/'.$sessionid.'.txt');
в PHP. Любой пользователь может добавить текст в файл .txt с помощью POST, и я хотел бы, чтобы другие пользователи с открытой страницей были уведомлены (и обновлены) о недавнем изменении файла — в то время как пользователь, который сделал обновление, не получает уведомление о собственном обновлении.
Мне было трудно найти нужную информацию, так как я не уверен в том, что мне нужно искать — или даже в подходе к этому вопросу (jQuery, AJAX, PHP?). Я читал кое-что о filemtime
но я не знаю, как применить это в этом случае. Я в основном работаю с front-end, поэтому я не настолько опытен с такими проблемами. Я вроде нашел решение, но оно все время предупреждает о любых изменениях файлов, и, возможно, могло бы создать нагрузку на сервер (в худшем случае senario)?
var previous = "";
setInterval(function() {
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) {
if (ajax.responseText != previous) {
alert("file changed!");
previous = ajax.responseText;
}
}
};
ajax.open("POST", "stories/<?php echo($sessionid) ?>.txt", true); //Use POST to avoid caching
ajax.send();
}, 1000);
Есть ли способ работать и развивать этот код или с чего мне начать искать и работать? Я действительно понятия не имею, поскольку я никогда не делал ничего подобного раньше. Будем очень благодарны за любые ссылки на соответствующие ключевые слова, методы или учебники, которые я могу найти и использовать!
Если вы находите способ, позволяющий нескольким пользователям редактировать файл в режиме реального времени, вы можете использовать веб-сокеты. socket.io
это библиотека, которая позволяет отправлять сообщения в двух направлениях между сервером и всеми клиентами, подключенными к нему через веб-сокеты.
В вашем случае после внесения изменений в текстовый файл вы можете отправить сообщение всем подключенным клиентам, сообщив им об этом изменении.
Это так же просто, как socket.broadcast.emit('File Edited')
Вы можете либо отправить новое содержимое через сам сокет, либо сделать ajax-запрос при получении этого сообщения сокета.
Других решений пока нет …