Maison  >  Article  >  développement back-end  >  Exemple de code pour l'affichage du journal en temps réel de Python Tornado Websocket

Exemple de code pour l'affichage du journal en temps réel de Python Tornado Websocket

高洛峰
高洛峰original
2017-03-21 13:41:491994parcourir

1. Thème : Affichage en temps réel des fichiers journaux générés dynamiquement par le serveur

2 Processus :

 1. navigateur Établissez un lien websocket avec le serveur, le serveur raccroche pour enregistrer l'instance de lien et attend que le nouveau contenu déclenche l'action de retour

 2. Le script du serveur de journaux boucle pour découvrir nouveau contenu, trouve de nouvelles lignes et attend la tornade API POST envoie un nouveau contenu

 3. Le processeur tornado reçoit le nouveau contenu et renvoie une nouvelle ligne au lien client enregistré via websocket

 4. Le navigateur client reçoit le Nouveau contenu, modification, affichage

3 Code :

1. >, gestionnaire de page de base et 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. Gestionnaire de websocket côté serveur (WriteNewLinesHandler), enregistrez et supprimez la classe de traitement de lien et la requête websocket côté client 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 attend que le script soumette un nouveau gestionnaire de traitement de contenu (ReceiveNewLinesHandler), envoie un nouveau contenu au client suspendu

fonction et parcourt le journal pour soumettre un nouveau script de contenu

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn