【问题标题】:Delay in receiving first message from a websocket connection从 websocket 连接接收第一条消息的延迟
【发布时间】:2022-10-01 13:23:42
【问题描述】:

如果满足某些条件,我正在用 Python 编写代码以连续发送三个 POST 请求。 POST 请求被发送到 FTX 交易所(这是一个加密交易所),每个请求都是一个“买入”订单。

第二个订单在第一个订单完成后立即触发,第三个订单在第二个订单完成后立即触发。为了加快代码速度(我需要在时间上非常接近地执行订单),我将所有 POST 请求发送到一个子进程(使用multiprocessing.Process()),而不是等待请求响应,我等待从 websocket 连接到通知每个新成交订单的walletchannel 的更新。这个 websocket 连接是在代码的最开始的一个子进程中打开的。

所以,代码的时间线如下

  1. 打开到wallet 通道的Websocket 连接
  2. 循环直到满足条件
  3. 如果为 True,则退出循环并通过 POST 请求发送第一个订单
  4. 等到第一个订单完成(即从 websocket 更新)
  5. 通过 POST 请求发送第二个订单
  6. 等到第二个订单完成(即从 websocket 更新)
  7. 通过 POST 请求发送第三个订单
  8. 等到第三个订单完成(即从 websocket 更新)
  9. 返回“已提交并填写的订单”

    我有一个小问题,在步骤 (4) 中来自 websocket 的更新需要太多时间才能到达(大约 1 秒),而步骤 (6) 和 (8) 非常快(大约毫秒) .

    看起来 websocket 连接在步骤 (3)-(4) 之前以某种方式处于休眠状态,并且接收消息需要一些时间,但是,一旦收到第一条消息,所有后续消息都会很快到达。我不是网络专家...如何避免从 websocket 接收第一条消息时出现这种延迟?

    我每 20 秒 ping 一次 websocket 连接,并在 10 秒内等待一个 pong。

【问题讨论】:

    标签: python api websocket python-requests http-post


    【解决方案1】:

    我认为这不是您的代码的问题,而是您使用的服务的问题。

    例如,如果服务器收到一个简单的请求(例如 ping),则处理请求和响应所需的时间非常短。但是,如果它是一个复杂的请求,例如购买加密货币,服务器可能需要一些时间来处理您的请求,这就是我认为您的第一个请求会造成一些延迟的原因。

    • 我认为这发生在唯一的第一个请求中,因为服务器有一些缓存可以保存最近的用户。

    【讨论】:

    • 是的,这就是我的想法。这就是为什么我想时不时地发送小订单,只是为了保持交易所的反应。但我不知道这是否是最好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 2012-10-11
    相关资源
    最近更新 更多