问题描述
我正在研究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èneAdell
我在WireShark中打开的tcpdump大致如下
我可以在TCP Option - Timestamps
中看到TSval
这些可以说明什么吗?
很抱歉,可能是一些基本问题,确实缺乏该领域的经验,再次感谢。