对于不频繁的更新,API轮询是否比WebSockets更有效?

时间:2019-02-08 01:18:59

标签: python-3.x api websocket

我正在为加密货币建立交易算法,并增加了几种不同的交易所。

对于我添加的最后4个交易所,我使用交易所api端点检索所有硬币的报价(每次交易所每5分钟进行一次api调用)。

我开始着手实施Coinbase Pro,该Coinbase Pro没有可以一次导入所有报价的终端。

根据我目前的编码经验,我提出了两个选择...

选项A:每5分钟进行30次API调用,以导入价格数据。

选项B:通过30个不同频道上的网络套接字进行连接,并使用最新更新来更新字典,并每5分钟发送一次到SQL。


我的担忧:

Coinbase非常活跃,仅连接到2个Web套接字时,似乎每秒就有多个更新。

在这种情况下使用websocket是否浪费资源?

我没有制定高频交易策略,因此较小的等待时间就不成问题了。同时,我担心由于http挂断/超时,可能会导致30分钟的请求占用一分钟的时间。

如果API轮询是最好的解决方案,那么我是否能够使用grequests(用于异步http请求),urllib3(连接池)或httplib(通过保持连接打开)来减少延迟?

如果这是一个愚蠢的问题,我很抱歉,我只有一年的编码经验,但在Google / stackoverflow上似乎找不到适合这种情况的正确解决方案。

任何建议将不胜感激!

最好的问候

荡妇

1 个答案:

答案 0 :(得分:1)

我认为您非常了解Long Polling和WebSockets之间的区别因素。通常,使用Coinbase提供的数据类型,人们可以构建仪表板或实时应用程序(如上所述),这些数据表或实时应用程序在一秒钟内可以多次更新数据。 Here's an example。因此,从交流的频率来看,长轮询将是必经之路。

但是,以下因素可以帮助您做出决定:

  1. 您的应用程序是否可以每5分钟发送一次新请求以获取新数据?如果是这样,长轮询是解决方案。但是,如果您有一个用例,其中服务器会将“数据”“推送”到客户端应用程序,那么WebSockets绝对是您的选择。
  2. 由于Long-Polling基于HTTP协议,因此它是无状态的,因此,如果您需要状态始终保持一致,那么不幸的是Long-Polling不允许这样做。您必须在每个请求中重复元数据。而对于WebSockets,该连接将成为一个单一的全双工持久连接,因此状态始终保持不变。

要了解有关WebSockets最佳用例的更多信息,请观看此conference talk

希望这有助于解决您的查询。