この問題の目的は次のとおりです:
目的は、Unix コマンドの tail -f に似た、リモート サーバーにあるログ ファイルを監視するシステムを開発することです。ログ ファイルには新しいデータが継続的に追加されます。このシステムは以下で構成されます:
同じサーバー上にある指定されたログ ファイルに対する進行中の変更を追跡するサーバー アプリケーション。このアプリケーションは、新しく追加されたデータをクライアントにリアルタイムで送信できる必要があります。
URL (例: http://localhost/log) 経由でアクセス可能な Web ベースのクライアント インターフェイス。ユーザーがページをリロードすることなく、ログ ファイルの更新が発生すると動的に表示するように設計されています。最初に、ページにアクセスすると、ログ ファイルから最新の 10 行が表示されるはずです。
次のシナリオも処理しました:サーバーは、遅延を最小限に抑え、可能な限りリアルタイムに近い更新を実現するために、更新をクライアントに積極的にプッシュする必要があります。
ログ ファイルが非常に大きい (可能性としては数ギガバイト) 可能性があることを考慮して、ファイル全体を処理せずに最後の 10 行を効率的にフェッチする戦略を開発する必要があります。
サーバーは、ファイル全体を再送信するのではなく、ファイルに新たに追加した部分のみをクライアントに送信する必要があります。
サーバーがパフォーマンスを低下させることなく複数のクライアントからの同時接続をサポートすることが重要です。
クライアントの Web ページは、最初のリクエスト後に読み込み状態に留まらずにすぐに読み込まれる必要があり、新しい更新を表示するために再読み込みする必要はありません。
最後の 10 件のメッセージを表示するシンプルな UI を備えた Flask アプリケーションを作成しました。
私は flask-socketio を使用して接続を形成し、fileObj.seek()、fileObj.tell() などのファイル処理の基本概念も使用しました。
from flask import Flask, render_template from flask_socketio import SocketIO, emit from threading import Lock app = Flask(__name__) socketio = SocketIO(app) thread = None thread_lock = Lock() LOG_FILE_PATH = "./static/client.txt" last_position = 0 position_lock = Lock() @app.route('/') def index(): return render_template('index.html') @socketio.on('connect') def test_connect(): global thread with thread_lock: if thread is None: print("started execution in background!") thread = socketio.start_background_task(target=monitor_log_file) def monitor_log_file(): global last_position while True: try: with open(LOG_FILE_PATH, 'rb') as f: f.seek(0, 2) file_size = f.tell() if last_position != file_size: buffer_size = 1024 if file_size <pre class="brush:php;toolbar:false"> <meta charset="UTF-8"> <title>Basics</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.4/socket.io.js"></script> <h1 id="User-Updated-Files-Display-it-over-here">User Updated Files Display it over here:</h1> <div id="output"></div> <script> var socket = io("http://127.0.0.1:5000"); socket.on('connect', function() { console.log('Connected to the server'); }); socket.on('disconnect', function() { console.log('Client disconnected'); }); socket.on('log_updates', function(data) { console.log("data", data); var div = document.getElementById('output'); var lines = data.content.split('\n'); div.innerHTML = ''; lines.forEach(function(line) { var p = document.createElement('p'); p.textContent = line; div.appendChild(p); }); }); </script>
フラスコ アプリケーションの静的フォルダーの下に client.log ファイルも作成します。
何か間違ったことをした場合は、遠慮なく修正してください。修正があれば以下にコメントしてください!
以上がUnix コマンドの tail -f と同様に、リモート サーバー上にあるログ ファイルを監視するシステムを開発します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Tomergelistsinpython、あなたはオペレーター、extendmethod、listcomfulting、olitertools.chain、それぞれの特異的advantages:1)operatorissimplebutlessforlargelist;

Python 3では、2つのリストをさまざまな方法で接続できます。1)小さなリストに適したオペレーターを使用しますが、大きなリストには非効率的です。 2)メモリ効率が高い大規模なリストに適した拡張方法を使用しますが、元のリストは変更されます。 3)元のリストを変更せずに、複数のリストをマージするのに適した *オペレーターを使用します。 4)Itertools.chainを使用します。これは、メモリ効率が高い大きなデータセットに適しています。

Join()メソッドを使用することは、Pythonのリストから文字列を接続する最も効率的な方法です。 1)join()メソッドを使用して、効率的で読みやすくなります。 2)サイクルは、大きなリストに演算子を非効率的に使用します。 3)リスト理解とJoin()の組み合わせは、変換が必要なシナリオに適しています。 4)redoce()メソッドは、他のタイプの削減に適していますが、文字列の連結には非効率的です。完全な文は終了します。

pythonexexecutionistheprocessoftransforningpythoncodeintoexecutabletructions.1)interpreterreadSthecode、変換intobytecode、thepythonvirtualmachine(pvm)executes.2)theglobalinterpreeterlock(gil)管理委員会、

Pythonの主な機能には次のものがあります。1。構文は簡潔で理解しやすく、初心者に適しています。 2。動的タイプシステム、開発速度の向上。 3。複数のタスクをサポートするリッチ標準ライブラリ。 4.強力なコミュニティとエコシステム、広範なサポートを提供する。 5。スクリプトと迅速なプロトタイピングに適した解釈。 6.さまざまなプログラミングスタイルに適したマルチパラダイムサポート。

Pythonは解釈された言語ですが、コンパイルプロセスも含まれています。 1)Pythonコードは最初にBytecodeにコンパイルされます。 2)ByteCodeは、Python Virtual Machineによって解釈および実行されます。 3)このハイブリッドメカニズムにより、Pythonは柔軟で効率的になりますが、完全にコンパイルされた言語ほど高速ではありません。

useaforloopwhenteratingoverasequenceor foraspificnumberoftimes; useawhileloopwhentinuninguntinuntilaConditionismet.forloopsareidealforknownownownownownownoptinuptinuptinuptinuptinutionsituations whileoopsuitsituations withinterminedationations。

pythonloopscanleadtoErrorslikeinfiniteloops、ModifiningListsDuringiteration、Off-Oneerrors、Zero-dexingissues、およびNestededLoopinefficiencies.toavoidhese:1)use'i


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!
