Javascriptプロットソリューションの使用について話しているときは、次のようにします。
- ページの読み込み時に、完全なテキストファイルを読み取り、そのサイズを記憶することにより、現在のグラフを作成します。
- ページが読み込まれた後、AJAX-techniques(
XMLHttpRequest
)を使用してサーバー上の特定のスクリプトを定期的にポーリングし、テキストファイルの最後に認識されたファイルサイズをパラメーターとして渡すJavascript関数を作成します。
- ポーリングスクリプトはfilesizeパラメーターを受け取り、テキストファイルを開き、最後にファイルを読み取ったポイント(filesize-parameter)に到達するまでファイルをスキップします。
- ポーリングスクリプトは、ファイルサイズからファイルの終わりおよび新しいファイルサイトまでのすべての利用可能なデータを返します
- JavascriptがAJAX応答を読み取り、必要なプロットポイントをグラフに追加します
- 次に、新しいファイルサイズをパラメーターとして使用して、サーバー側スクリプトのポーリングをやり直すことができます。
この手順には、サーバー側とクライアント側のプログラミングが含まれますが、簡単に実行できます。
index
以下は、テキストファイルを読み取る位置をスクリプトに指示し、JSONでエンコードされたプロットポイントのリストと新しいインデックスポインターを返すパラメーターを必要とするポーリングスクリプトのサンプルです。
// 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()
、同じページでの同時呼び出しは問題になります)。