ホームページ  >  記事  >  バックエンド開発  >  Python Tornado WebSocket のリアルタイムログ表示のサンプルコード

Python Tornado WebSocket のリアルタイムログ表示のサンプルコード

高洛峰
高洛峰オリジナル
2017-03-21 13:41:491939ブラウズ

1. テーマ: サーバーによって動的に生成されたログファイルのリアルタイム表示

2. プロセス:

1. クライアントブラウザはサーバーとの WebSocket リンクを確立し、サーバーはリンクを保存するために一時停止します。インスタンスを作成し、新しいコンテンツがリターン アクションをトリガーするのを待ちます

2. ログ サーバー スクリプト は、新しいコンテンツを検出するために をループし、新しい行を見つけて、新しいコンテンツを送信するために API POST を tornado に送信するのを待ちます

3. Tornado プロセッサ新しいコンテンツを受信し、WebSocket 経由で保存されたクライアント リンクに戻ります

4. クライアント ブラウザは新しいコンテンツを受信し、それを変更して表示します

3. 1. トルネード サーバー URL

ルーティング

、基本的なページ ハンドラーと HTML:

    #模块路径根据自身项目而定
    (r'/logs/index/',               'apps.logs.handler.IndexHandler'),
    (r'/logs/newlinesforcallbacker/',       'apps.logs.handler.WriteNewLinesHandler'),
    (r'/logs/newlinesforserver/',           'apps.logs.handler.ReceiveNewLinesHandler'),
class IndexHandler(BaseHandler):
    ''' 主页 '''
    def get(self, *args, **kwargs):
        self.render('logs/index.html')
rreee

2. サーバー エンド WebSocket ハンドラー (WriteNewLinesHandler)、リンク処理クラスとクライアント WebSocket リクエストを保存および削除します

<div align="center">
    <h2>this logs monitor</h2>
    <div style="width: 70%" id="main">
    <!-- 行展示 -->
    </div>
</div>
class ProStatus(object):
    &#39;&#39;&#39; 处理类 &#39;&#39;&#39;

    w_register = []

    def register(self, callbacker):
        &#39;&#39;&#39; 记录客户端连接实例 &#39;&#39;&#39;
        self.w_register.append(callbacker)

    def unregister(self, callbacker):
        &#39;&#39;&#39; 删除客户端连接实例 &#39;&#39;&#39;
        self.w_register.remove(callbacker)

    def makelines(self, lines):
        &#39;&#39;&#39; 处理接受的行内容 &#39;&#39;&#39;
        pass

    def trigger(self, line):
        &#39;&#39;&#39; 向所有被记录客户端发送最新内容 &#39;&#39;&#39;
       pass

class WriteNewLinesHandler(tornado.websocket.WebSocketHandler):
    &#39;&#39;&#39; 接受websocket链接,保存链接实例 &#39;&#39;&#39;
    def check_origin(self, origin):     #针对websocket处理类重写同源检查的方法
        return True

    def open(self):
        &#39;&#39;&#39; 处理新的连接  &#39;&#39;&#39;
        ProStatus().register(self)

    def on_close(self):
        ProStatus().unregister(self)  #删除客户端连接

    def on_message(self, message):
        pass

3. Tornado は、スクリプトが新しいコンテンツ処理ハンドラーを送信するのを待ちます ( ReceiveNewLinesHandler)、一時停止されたクライアント

関数に新しいコンテンツを送信し、ログ送信の新しいコンテンツ スクリプト

$(function(){
            function requestText(){
                host = "ws://" + location.hostname + ":" + location.port + "/logs/newlinesforcallbacker/"
                websocket = new WebSocket(host)

                websocket.onopen = function(evt){}      // 建立连接
                websocket.onmessage = function(evt){    // 获取服务器返回的信息
                    data = $.parseJSON(evt.data)
                    $("#main").append(data+"</br>")     //写入页面
                }
                websocket.onerror = function(evt){}
            }

            requestText()
})
rrree を走査します。

以上がPython Tornado WebSocket のリアルタイムログ表示のサンプルコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。