亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

瀏覽:3日期: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 編程
相關文章:
主站蜘蛛池模板: 国产网站在线免费观看 | 成人欧美精品久久久久影院 | 人人澡人人澡碰人人看软件 | 99国内精品 | 一区卡二区卡三区卡视频 | 国产免费a v吧在线观看不卡 | 中文字幕亚洲图片 | 国产自产2023最新麻豆 | 日韩在线免费看 | 一 级 黄 色 片生活片 | 国产精品综合网 | 日韩在线第一区 | 婷婷久久精品 | 亚洲国产精品人久久电影 | 免费a级毛片大学生免费观看 | 久久草网站 | 国产高清视频网站 | 日韩免费视频网站 | 欧美中文日韩 | 看全大色黄大色黄大片一级爽 | 成年性羞羞视频免费观看无限 | 亚洲黄色高清视频 | 欧美伊人久久久久久久久影院 | 国产精品系列在线观看 | 黄网站在线播放视频免费观看 | 欧美一级毛片免费播放aa | 黄色美国大片 | 精品亚洲午夜久久久久 | 在线观看黄色影视 | 黄色a级毛片 | 亚洲第一伊人 | 在线视频精品免费 | 国产 欧美 日韩在线 | 欧美一级毛片欧美一级无片 | 国产成人yy免费视频 | 五月伊人网| 国产人成精品香港三级古代 | 免费看黄在线网站 | japanese亚洲人妖| 免费国产成人高清在线观看视频 | 国产成人亚洲合集青青草原精品 |