>  기사  >  백엔드 개발  >  Python Tornado WebSocket 실시간 로그 표시를 위한 예제 코드

Python Tornado WebSocket 실시간 로그 표시를 위한 예제 코드

高洛峰
高洛峰원래의
2017-03-21 13:41:491975검색

1. 테마: 서버에서 동적으로 생성한 로그 파일을 실시간으로 표시

2. 프로세스:

 1. 클라이언트 브라우저 서버와 웹소켓 링크를 설정하면 서버는 링크 인스턴스를 저장하기 위해 전화를 끊고 새 콘텐츠가 반환 작업을 트리거할 때까지 기다립니다

 2. 로그 서버 스크립트는 루프 를 검색하여 검색합니다. 새 콘텐츠, 새 줄 찾기 및 토네이도 대기 API POST가 새 콘텐츠 전송

 3. 토네이도 프로세서는 새 콘텐츠를 수신하고 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')
<div align="center">
    <h2>this logs monitor</h2>
    <div style="width: 70%" id="main">
    <!-- 行展示 -->
    </div>
</div>

2. 서버측 웹소켓 핸들러(WriteNewLinesHandler), 링크 처리 클래스 및 클라이언트측 웹소켓 요청 js 저장 및 삭제

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
$(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()
})

3. tornado는 스크립트가 처리 핸들러(ReceiveNewLinesHandler)를 위해 새 콘텐츠를 제출할 때까지 기다린 후 일시 중지된 클라이언트 함수 에 새 콘텐츠를 보내고 로그를 탐색하여 새 콘텐츠 스크립트를 제출합니다아아아아아아

위 내용은 Python Tornado WebSocket 실시간 로그 표시를 위한 예제 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.