【发布时间】:2021-02-12 22:45:56
【问题描述】:
我正在处理 websocket 的调试延迟问题。
我正在尝试通过其 websocket 接口从加密货币交易所接收一些价格信息。我们收到的数据包包括在交换服务器上生成的时间戳。我记录了我们在计算机(“客户端”)上收到滴答信息的时间,并比较了到达时间和服务器生成时间之间的延迟。大多数滴答声显示几十毫秒,这或多或少都很好。但是每天我们都会看到几次延迟变成几秒甚至超过十秒,我想弄清楚这些大延迟是从哪里来的。
系统使用的是Python编程语言,我使用的websocket模块是websocket-client(https://pypi.org/project/websocket_client/,https://github.com/websocket-client/websocket-client),我尝试在模块内部添加日志,看看是不是模块处理时间的原因但仍然没有运气。
目前我脑海中的一个想法是使用tcpdump来捕获网络流量并记录tcp数据包到达我的网卡的时间。如果这个时间仍然存在延迟,我将别无他法,只能将程序移动到同位服务器。但是,我在这里遇到困难,因为 websocket 连接是 SSL 加密的。因此,我看不到消息中包含的刻度生成时间。
这里有人有解决方案吗?特别是:
- 有没有办法从客户端的
websocket-clientpython 包中检索 SSL 的私钥? (我假设密钥应该在本地某处可用,否则websocket-client无法解密数据本身。WireShark 应该能够解密 TSL1.2 协议的消息)- 如果使用
websocket-client包不容易做到这一点,我很乐意尝试其他由python、C/C++ 编写的websocket lib。
- 如果使用
-
tcpdump能否获取服务器发送TCP数据包时的时间戳(即使是服务器时间)?
我们也非常感谢任何其他建议。
非常感谢!
感谢@Eugène Adell
我在 WireShark 中打开的 tcpdump 大多如下所示
我可以在TCP Option - Timestamps 中看到 TSval
这些能说明什么吗?
抱歉,可能是基本问题,在这方面真的缺乏经验,再次感谢。
【问题讨论】:
标签: python websocket wireshark latency tcpdump