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>
class ProStatus(object): ''' 处理类 ''' w_register = [] def register(self, callbacker): ''' 记录客户端连接实例 ''' self.w_register.append(callbacker) def unregister(self, callbacker): ''' 删除客户端连接实例 ''' self.w_register.remove(callbacker) def makelines(self, lines): ''' 处理接受的行内容 ''' pass def trigger(self, line): ''' 向所有被记录客户端发送最新内容 ''' pass class WriteNewLinesHandler(tornado.websocket.WebSocketHandler): ''' 接受websocket链接,保存链接实例 ''' def check_origin(self, origin): #针对websocket处理类重写同源检查的方法 return True def open(self): ''' 处理新的连接 ''' 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() })
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!