Bir metin dosyasına elde edilen verileri kullanarak gerçek zamanlı grafik (histogram) çizmek için nasıl

3 Cevap php

Ben sürekli üretilen verileri sunucu üzerinde bir program tarafından oluşturulmuş (metin dosyası) var. Ben sadece powergrid yaptığı gibi gerçek zamanlı bir grafik gibi verileri çizmek istiyorum. Bu benim yaklaşım oldu:

Verileri bir metin dosyasına sunucu üzerinde sürekli üretilir gibi, ben dosya (get_file_contents), veri noktalarını verir ve kullanarak grafik çizmek okuyan bir PHP komut dosyası yazdı sparkline jQuery eklentisi. Ama sorun dosyasını okur olduğunu all at once. Ayrıca, metin dosyası büyümeye devam ediyor. Herkes bana iyi bir yaklaşım önerebilirsiniz?

3 Cevap

Eğer aşağıdakileri yapın JavaScript çizme çözüm kullanarak bahsediyoruz gibi:

  • sayfa yük size tam metin dosyası okuma ve boyutunu hatırlayarak geçerli bir grafik oluşturabilirsiniz.
  • sayfa yüklendikten sonra bir JavaScript işlevi oluşturmak düzenli anketler AJAX-teknikleri (XMLHttpRequest) kullanılarak ve bir parametre olarak metin dosyasının bilinen son dosyaboyu geçen sunucu üzerinde belirli bir komut dosyası.
  • sizin yoklama komut, dosya boyutu parametre alır metin dosyasını açar, bu son dosyayı (dosya boyutu-parametre) okumak hangi noktaya ulaşıncaya kadar dosya üzerinden atlar.
  • yoklama komut dosyası sonuna ve yeni filesite için filesize tüm mevcut verileri döndürür
  • senin Javascript AJAX yanıt okur ve grafiği için gerekli arsa puan ekler
  • Eğer bir parametre olarak yeni dosya boyutu ile sunucu tarafı komut dosyası sorgulama üzerinde başlayabilirsiniz

Bu işlem sunucu tarafı yanı sıra istemci tarafı programlama gerektirir ama kolayca yapılabilir.

Aşağıdaki metin dosyasını okumak için hangi pozisyon komut söyler ve arsa puan json kodlanmış listesi ve yeni endeks işaretçi döndüren bir index ve parametreleri gerektiren örnek bir yoklama betik.

// 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();

Gelen JavaScript / jQuery parçacığını olabilir:

// 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);

Bu sadece bir örnektir ve tüm hata denetimi (pollData() aynı sayfada sorunlu olacaktır örneğin eşzamanlı aramalar) yoksun o dikkatli olun.

Eğer görselleştirme kısmı çoğunlukla çalıştı var gibi geliyor. Dataset yeniden hesaplamak için çok büyük ise, artımlı histogramların muhafaza teknikleri içine bakmak isteyebilirsiniz. İşte size yardımcı olabilecek birkaç kağıtlar vardır:

Öncelikle, ben kullanıcı tarafındaki grafik üretmek olmaz. Bu basit nedenleri vardır: Herkes JavaScript etkinleştirilmelidir vardır (tamam, hedef grubu bağlıdır) ve muhtemelen çok hızlı değildir.

Zaten PHP kullanarak bu yana, bu nedenle sunucu tarafında grafikler oluşturmak için pChart gibi bir paket kullanarak öneriyoruz. Bu başka olumlu bir yan etkisi olduğunu söyledi paketi de, önbelleğe alma ile geliyor. Ve böylece - bu, örneğin, veri metin dosyası (dosya PHP komut dosyası çalıştırıldığında her zaman değiştirildiği başka basitçe kontrol edebilirsiniz PHP ile de bu oluşturmak varsayarak) değiştirildiğinde, sadece grafik oluşturmak için izin verecek kaynakların tasarrufu yükler ;)