电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python和websocket構建實時日志跟蹤器的步驟

瀏覽:12日期:2022-06-22 16:27:52
前言

websocket 是一種網絡傳輸協議。可在單個 TCP 連接上進行全雙工通信。基于此,websocket 使得客戶端與服務端的通信變得更加簡便和高效。

什么是 websocket

websocket 是獨立的、創建在 TCP 上的協議。該協議在 2008 年誕生,并在 2011 年成為國際標準。它的一個主要特點是——全雙工,即一旦建立連接,服務端或客戶端可以主動向對方推送消息。

在 websocket 出現之前,網站如果需要實現推送技術,都是采用輪詢的方式,即瀏覽器每隔一段時間就向服務器發出請求。這種模式的缺點在于,瀏覽器需要不斷向服務器發送請求,消耗很多的帶寬資源。比較新的 Comet 技術雖然也可以實現雙向通信,但依然需要反復發送請求,并且 Comet 中普遍采用的 HTTP 長連接也會消耗服務器資源。

基于以上的情況,HTML5 定義了 websocket 協議,能夠更好的節省服務器和帶寬資源。并且實現高效的實時通信。目前,所有的瀏覽器都支持它。

websocket 通信原理和機制

websocket 雖然是一種新的協議,但它不能夠脫離 http 單獨存在,當客戶端構建一個 websocket 實例,并且向服務端連接時,會首先發起一個 http 報文請求。告訴服務端需要將通信協議切換至 websocket。

如果服務端支持 websocket 協議,那么它會將通信協議切換至 websocket 并且返回響應報文。此時的返回狀態碼是 101,表示同意協議轉換請求,接下來便可以進行數據傳輸了。

websocket 之所以借助 HTTP 完成握手協議,是因為有良好的兼容性,默認端口是 80 和 443。握手階段不容易被防火墻屏蔽。

websocket 的特點 開銷小,服務器和客戶端交換數據時,協議包頭部包含較少的信息 實時性高,協議采用全雙工,相對于 http 請求客戶端發起請求,服務端才能響應的模式,延遲明顯更低 與 HTTP 有良好的兼容性,默認端口是 80 和 443。握手采用 HTTP 協議,不容易被防火墻屏蔽 支持文本和二進制數據傳輸 支持自定義拓展,用戶可以自己實現自定義的子協議 通過心跳機制保持服務端與客戶端的長連接 構建實時日志跟蹤的小例子

服務端開啟一個監聽日志腳本的服務,服務會限制允許訪問的路徑范圍(防止黑客利用程序漏洞,掃描整個服務器);服務器通過解析客戶端的請求,返回日志的消息內容給客戶端;服務器定時發送心跳檢測給客戶端,如果沒有收到客戶端的響應,則斷開連接

服務端核心程序代碼邏輯如下

with open(file_path) as f: # 首次讀取指定行數(NUM_LINES)的日志文件,發送給客戶端 content = ’’.join(deque(f, NUM_LINES)) content = conv.convert(content, full=False) await websocket.send(content) # 如果發現客戶端有 tail 請求,則進行 tail 日志追蹤 if tail:# 首先創建發起這次請求的心跳時間last_heartbeat = time.time()while True: # 每次 tail 服務端最新的日志記錄,返回給客戶端 content = f.read() if content:content = conv.convert(content, full=False)await websocket.send(content) else:await asyncio.sleep(1) # 檢測這次請求距上一次發起請求,是不是已經超過了最長心跳檢測時長,如果是,發起心跳檢測 if time.time() - last_heartbeat > HEARTBEAT_INTERVAL:try: await websocket.send(’ping’) pong = await asyncio.wait_for(websocket.recv(), 5) logger.info(f'pong:{pong}') if pong != ’pong’:raise Exception()except Exception: raise Exception(’Ping error’)else: last_heartbeat = time.time() else:await websocket.close()

客戶端就非常簡單了,監聽服務端日志的文件,發現有新的日志產生則輸出日志或者直接將日志實時展示在前端頁面上。相應地,如果需要長期監聽,那么當服務端發送心跳檢測的信號過來,也需要回應響應的心跳反饋

客戶端核心代碼邏輯如下

async def consumer_handler(websocket: WebSocketClientProtocol) -> None: async for message in websocket:log_message(message)if message == 'ping': await websocket.send('pong')async def cousume(hostname: str, port: int, log_file: str, tail:bool=True) -> None: websocket_resource_url = f'ws://{hostname}:{port}{log_file}' if tail:websocket_resource_url = f'{websocket_resource_url}?tail=1' async with websockets.connect(websocket_resource_url) as websocket:await consumer_handler(websocket)def log_message(message: str) -> None: logger.info(f'Message: {message}')

這里模擬一個日志生產文件

代碼邏輯如下

import osfrom loguru import loggerclass LoggerExtend(object): # 存放目錄名稱 folder = ’../logs’ def __init__(self, filename, folder=None):self.folder = folder or self.folderif not os.path.exists(self.folder): os.mkdir(self.folder)self.file = self.folder + ’/’ + filenamelogger.add(self.file, rotation='100 MB') @property def get_logger(self):return loggerif __name__ == ’__main__’: logger = LoggerExtend(os.path.basename(__file__).replace('.py', '.log')).get_logger import time while True:logger.info('你好aaa')

最后依次啟動日志生產程序→服務端程序→客戶端程序

日志生產文件啟動后,運行效果如下

python和websocket構建實時日志跟蹤器的步驟

服務端啟動程序運行,無運行日志產生

這時候啟動客戶端程序,運行效果如下

python和websocket構建實時日志跟蹤器的步驟

完整代碼請移步至 GitHub 查看

https://github.com/hacksman/l...

日志生產程序路徑:

common/logger_extend.py

服務端程序路徑:

websoctet_lab/log_server.py

客戶端程序路徑:

websoctet_lab/cousumer_log_view.py

以上就是python和websocket構建實時日志跟蹤器的步驟的詳細內容,更多關于python 構建實時日志跟蹤器的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 智能气瓶柜(大型气瓶储存柜)百科 | 耐驰泵阀管件制造-耐驰泵阀科技(天津)有限公司 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | PCB接线端子_栅板式端子_线路板连接器_端子排生产厂家-置恒电气 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 钛合金标准件-钛合金螺丝-钛管件-钛合金棒-钛合金板-钛合金锻件-宝鸡远航钛业有限公司 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 选矿设备,选矿生产线,选矿工艺,选矿技术-昆明昆重矿山机械 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 七维官网-水性工业漆_轨道交通涂料_钢结构漆 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 光照全温振荡器(智能型)-恒隆仪器 | 餐饮加盟网_特色餐饮连锁加盟店-餐饮加盟官网 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 北京三友信电子科技有限公司-ETC高速自动栏杆机|ETC机柜|激光车辆轮廓测量仪|嵌入式车道控制器 | 代理记账_公司起名核名_公司注册_工商注册-睿婕实业有限公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | 亚克力制品定制,上海嘉定有机玻璃加工制作生产厂家—官网 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | TPU薄膜_TPU薄膜生产厂家_TPU热熔胶膜厂家定制_鑫亘环保科技(深圳)有限公司 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 洛阳装修公司-洛阳整装一站式品牌-福尚云宅装饰| HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 不锈钢监控杆_监控立杆厂家-廊坊耀星光电科技有限公司 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 睿婕轻钢别墅_钢结构别墅_厂家设计施工报价 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 家乐事净水器官网-净水器厂家「官方」|