HowNetビジネスの新しいソースを、元のタイトル:リアルタイムで簡潔ページリフレッシュデータは、達成するために
この記事では、特定のビジネス・ロジックと合理的にコントロールすることはできませんかどうかだけで技術と簡単な例、バックエンドのフレームワークDjangoの、ある、下は仕事を達成する必要があります
3つのジョブの状態を実行するための自動化スクリプト:
1と実行に失敗し、2、3正常な実行を実行しませんでした
フロントページを表示するために、リアルタイムでタスクのステータスは、それがデータベースに随時要求ステータスデータフィールドに必要なことはwebtask_stuで、前面表示に戻します
二つのアイデア:
1、ポーリング要求毎回のフロントエンド、接続を確立し、フロントエンドのデータは、バックエンドで返されます
特定の実装:タイマーを設定するには、すべての5Sバックエンドのデータ要求は、データがフロントエンド後端をレンダリングするために返されます
図2に示すように、接続を確立する要求の唯一の前端、後端が積極フロントエンドにデータをプッシュし続けることができます
特定の実装:後端までのフロントエンドは、ソケットコネクタの方法によって確立され、ポーリングの後端データベースのデータ、先端をプッシュするためのイニシアチブは、この利点は明らかである、それはネットワーク要求の数を減らすことができます
モード:Ajaxのタイマー要求:
1、のsetIntervalの前端は、タイマ、要求を渡すタイマ機能と時間AJAXを設定します
関数 get_stu_list(){
PARAM = {}; $ .post("/ウェブ/ webtask_stu /"、PARAM、機能(データ){ VAR webtask_tu_list = data.webtask_stu; にconsole.log(webtask_tu_list); VAR TR = $("TBODYのTR"); $ .each(TR、関数(I、ELE){$(ELE).find("TD:EQ(4)")のテキスト(webtask_tu_list [I])});});};たsetInterval(get_stu_list、5000)。
バックエンドでも非常に簡単です、あなたはJSonResponseにクエリデータを返すことができます
デフ webtask_stu (リクエスト):webtasks = Webtask.objects.all()webtask_stu_list = [] webtaskため webtasksで:webtask_stu_list.append(webtask.webtask_stu)DIT = { 'webtask_stu':webtask_stu_list}プリント(webtask_stu_list) JsonResponse(DIT)を返します
第二の方法、WebSocketを
図は、連続データの後端にコンソールデモのフロントエンドの出力をフロントエンドを押し、効果を以下
図1に示すように、前端部構成ソケット接続オブジェクト用WebSocketプロトコルは、フロントWS始まる、プロトコルではなく、HTTPプロトコルで
2、windows.loaction.hostは(ポートを含む)のドメイン名を取得することができます
3、以下の方法が主に使用されている、あなたは、特定のコメントを見ることができます
socket.onopen:接続に成功
socket.onmessage:成功した効果をリフレッシュすることによって達成するバックエンドのjQueryによって返された状態データをレンダリングし、バックエンドで返されたデータを取得
socket.onclose:接続障害
図4は、バック文字列の後端に、オブジェクトのフロントエンドを有効にする必要がありますJSON.parse
するvar =ソケット 新のWebSocket("WS:" + window.location.host + "/ウェブ/ webtask_stu /");
= socket.onopen 関数(){ にconsole.log('のWebSocketオープン'); のWebSocket socket.send //成功した接続('adasdasda ....'); //サーバにデータを送信}; socket.onmessage = 関数(E){ //はconsole.log( 'メッセージ' + e.data); //印刷データがサーバから返された //はconsole.log(typeof演算(e.data)); はconsole.log(JSON.parse (e.data)); //はconsole.log(typeof演算(JSON.parse(e.data))); VAR = webtask_stu_list JSON.parse(e.data); VAR TR = $("のTBODY TR"); $ .each(TR、関数(I、ELE){$(ELE).find("TD:EQ(4)"。)テキスト(webtask_stu_list [ "webtask_stu"] [I])});};ソケット。OnCloseの= 関数(E){ にconsole.log(E); Socket.close(); // TCP接続を閉じます}。
Djangoのバックエンド部分:
1、Djangoのインストールプログラム次いでdwebsocket、PIP dwebsocketをインストールし、コードに導入
dwebsocket.decoratorsから 輸入accept_websocket
2、プラスデコレータ@accept_websocket、要求受信ソケット
3、request.is_websocket、WebSocketの要求がデータベースクエリ機能から我々のバックエンドデータを次に実行されたかどうかを決定する場合
5秒ごとに、遠位ループながらtime.sleepを介してデータ伝送を達成するために4、
それはJSONデータ形式であるため、図4に示すように、request.websocket.send(JSONデータ)フロントエンドにデータを返すために、フロントエンドは、上記課題を使用するオンJSON.parse、
DEF webtask_stu (リクエスト): request.is_websocket IF(): 一方 webtask_stu_list = [] webtasks = Webtask.objects.all():1 webtaskため webtasksで:webtask_stu_list.append(webtask.webtask_stu)DIT = { 'webtask_stu':webtask_stu_list } time.sleep(5)request.websocket.send(json.dumps(DIT))
ほぼ2つのアイデアがあり、他のより高度なAPIのソケットは、あるオンライン学習で見ることができます興味を持って実現します。