0

フラスコ マイクロフレームワークを使用して Python Web アプリケーションを開発しました。Bokeh によって生成されたインタラクティブなプロットと HTML5 のテーブルがいくつかあります。私の質問は、テーブルとグラフのデータをその場で更新する方法です。

スレッド クラスを使用してタイマーを設定し、数秒ごとにコードを再実行して、更新されたデータ エントリをテーブルとグラフにフィードする必要がありますか?

また、flask-socketIO についても調査しましたが、メッセージの送受信に関するものしか見つかりませんでした。この目的でflask-socketIO を使用する方法はありますか?

Bokeh-server も少し使用しましたが、その方向に進む必要がありますか? 2 つのサーバーを実行する必要があるということですか? 私のフラスコのウェブサーバーとボケサーバー?

私はこの種の仕事に不慣れです。何をすればいいのか詳しく教えていただけるとありがたいです。

4

2 に答える 2

2

あなたは本当に 1 つで 2 つの質問をしています。本当に、ここで 2 つの問題があります。まず、テーブルとグラフの更新されたデータへのアクセスをクライアントに定期的に許可するメカニズムが必要です。次に、クライアントがこれらの更新をページに組み込む必要があります。

最初の問題については、基本的に 2 つのオプションがあります。最も伝統的な方法は、Ajax リクエスト (つまり、ページのバックグラウンドで実行されるリクエスト) を定期的にサーバーに送信することです。別の方法として、WebSocket を使用してサーバーを強化すると、クライアントは永続的な接続を確立でき、サーバーに新しいデータがあるときはいつでもそれをクライアントにプッシュできます。どのオプションを使用するかは、ニーズによって大きく異なります。更新の頻度が高すぎない場合は、おそらくバックグラウンド HTTP 要求を使用し、独自の課題がある Socket.IO をミックスに追加することについて心配する必要はありません。一方、ライブで常に更新されるページのようなものが必要な場合は、WebSocket を使用することをお勧めします。

クライアントが新しいデータを取得したら、2 番目の問題に対処する必要があります。それを処理する方法は、使用しているテーブルとチャートに固有です。基本的に、サーバーから受信したこれらの新しい値をこれらのコンポーネントに渡す Javascript コードを記述して、ページを更新する必要があります。残念ながら、更新を自動的に行う方法はありません。もちろん、現在のページを捨てて、新しいデータでゼロから再構築することもできますが、それは見栄えがよくないため、更新を受け取るためにこれらのコンポーネントが公開している Javascript API の種類を見つける必要があります。

これが役立つことを願っています!

于 2016-02-04T15:20:09.527 に答える
0

すでに d3.js を使用している場合 (bokeh を使用していると思います)、d3 タイマーを使用する方が setInterval を使用するよりも最適です。ただし、私の意見では、 setInterval の方が読みやすいです。

function getData(){
    $.get( "ajax/test.html", function( data ) {
      $( ".result" ).html( data );
    });
}

var getDataCallback = function() {
    return function() {
        getData();
        d3.timer(getDataCallback(), 1000);
        return true;
    }
};

d3.timer(getDataCallback(), 10000);
于 2016-02-03T23:10:56.697 に答える