[英]Latency debug for websocket communication
我正在研究 websocket 的調試延遲問題。
我試圖通過其 websocket 接口從加密貨幣交易所接收一些價格信息。 我們收到的數據包包括在交換服務器上生成的時間戳。 我在我們的計算機(“客戶端”)上記錄我們收到滴答信息的時間,並比較到達時間和服務器生成時間之間的延遲。 大多數刻度顯示幾十毫秒,這或多或少是好的。 但是每天我們都會看到幾次延遲變成幾秒甚至十秒以上,我想弄清楚這些大延遲是從哪里來的。
系統使用 Python 編程語言,我使用的 websocket 模塊是websocket-client
( https://pypi.org/project/websocket_client/ , https://github.com/websocket-client/websocket-client ),我嘗試在模塊內添加日志,看看是否是由於模塊處理時間,但仍然沒有運氣。
我目前想到的一個想法是使用tcpdump
來捕獲網絡流量並記錄 tcp 數據包到達我的網卡的時間。 如果這次仍然存在延遲,我將別無他法,只能將程序移至同一位置的服務器。 但是,我在這里遇到了困難,因為 websocket 連接是 SSL 加密的。 因此,我看不到消息中包含的滴答生成時間。
有人在這里有一些解決方案嗎? 特別是:
websocket-client
python包中檢索SSL的私鑰? (我假設密鑰應該在本地某處可用,否則websocket-client
無法解密數據本身。WireShark 應該能夠解密 TSL1.2 協議的消息)
websocket-client
包不容易做到這一點,我很樂意嘗試由 python、C/C++ 編寫的其他 websocket 庫。tcpdump
可以獲取服務器發送 TCP 數據包時的時間戳(即使在服務器時間)?任何其他建議也受到高度贊賞。
非常感謝!
謝謝@Eugène Adell 我在 WireShark 中打開的 tcpdump 大致如下 我可以在
TCP Option - Timestamps
看到 TSval 這些能說明什么嗎? 對不起,可能是基本問題,真的缺乏這方面的經驗,再次感謝。
編輯
tcpdump 可以獲取服務器發送 TCP 數據包時的時間戳(即使在服務器時間)?
打開您的捕獲並查看數據包是否具有 TCP 時間戳選項(如RFC 1323 中所定義,但在RFC 7323 中有更好的解釋)。 如果是這樣,第一個SYN數據包應該已經提到它。
不幸的是,這些數據包中給出的TSval (以毫秒為單位的時間戳值)的含義不是真實時鍾,並且並不總是像真實時鍾一樣變化(這取決於您的計算機使用的實現)。 例如,如果與您的服務器的對話持續 60 秒,請檢查此 TSval 是否也從 60 秒開始移動,如果是,您可以使用此字段來跟蹤數據包的發送時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.