Как вы говорите об использовании замышляет решения Javascript вы делаете следующее:
- на странице загрузки вы создаете текущий график, читая полный текстовый файл и запоминать его размер ,
- После загрузки страницы вы создаете функцию Javascript, которая регулярно опросает определенный скрипт на вашем сервере с использованием AJAX-методов (
XMLHttpRequest
) и передает последний известный файл вашего текстового файла в качестве параметра.
- ваш сценарий опроса принимает параметр filesize, открывает текстовый файл, пропускает файл до тех пор, пока он не достигнет точки, из которой вы в последний раз прочитали файл (параметр-файл).
- скрипт опроса возвращает все доступные данные из размер_файла до конца файла и нового filesite
- вашего Javascript читает в ответ AJAX и добавляет необходимый сюжетную ваш граф
- вы можете затем начать с опроса вашего сценария на стороне сервера с новым размером в качестве параметра
Эта процедура включает в себя как серверное, так и клиентское программирование, но может быть выполнена легко.
Ниже приведен пример сценария опроса, который требует параметра index
, который сообщает сценарию, из которого следует читать текстовый файл, и возвращает список точек графика и новый указатель указателя.
// poll.php
$index = (isset($_GET['index'])) ? (int)$_GET['index'] : 0;
$file = fopen('path/to/your/file.txt', 'r');
$data = array(
'index' => null,
'data' => array()
);
// move forward to the designated position
fseek($file, $index, SEEK_SET);
while (!feof($file)) {
/*
* assuming we have a file that looks like
* 0,10
* 1,15
* 2,12
* ...
*/
list($x, $y) = explode(',', trim(fgets($handle)), 2);
$data['data'][] = array('x' => $x, 'y' => $y);
}
// set the new index
$data['index'] = ftell($file);
fclose($file);
header('Content-Type: application/json');
echo json_encode($data);
exit();
Соответствующий Javascript/JQuery фрагмент может быть:
// the jQuery code to poll the script
var current = 0;
function pollData() {
$.getJSON('poll.php', { 'index': current }, function(data) {
current = data.index;
for (var i= 0; i < data.data.length; i++) {
var x = data.data[i].x;
var y = data.data[i].y;
// do your plotting here
}
});
}
// call pollData() every 5 seconds
var timer = window.setInterval(pollData, 5000);
Пожалуйста, обратите внимание, что это только пример, и что ему не хватает все проверки ошибок (например одновременных вызовов в pollData()
на той же странице будет быть проблематичным).