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

高洛峰
Libérer: 2017-03-21 13:41:49
original
1991 Les gens l'ont consulté

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'),
Copier après la connexion
class IndexHandler(BaseHandler):
    ''' 主页 '''
    def get(self, *args, **kwargs):
        self.render('logs/index.html')
Copier après la connexion
<div align="center">
    <h2>this logs monitor</h2>
    <div style="width: 70%" id="main">
    <!-- 行展示 -->
    </div>
</div>
Copier après la connexion
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
Copier après la connexion
$(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()
})
Copier après la connexion
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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal