Python 实时数据的websocket与RESTAPI?

Python 实时数据的websocket与RESTAPI?,python,rest,websocket,httprequest,Python,Rest,Websocket,Httprequest,我需要经常访问服务器以获取金融工具的实时数据。价格不断变化,因此我需要每0.5秒申请一次新价格。代理的其余API允许我这样做,但是,我注意到连接到服务器时有相当多的延迟。我只是注意到他们也有websocket API。根据我读到的,他们都有一些优点/缺点。但对于我想做的事情,由于速度在这里特别重要,您会推荐哪种API?websocket真的更快吗 谢谢大家! 对于您所描述的内容,最有效的操作是在客户端和服务器之间使用webSocket连接,只有当价格发生了有意义的变化或者经过了最短的时间并且价格

我需要经常访问服务器以获取金融工具的实时数据。价格不断变化,因此我需要每0.5秒申请一次新价格。代理的其余API允许我这样做,但是,我注意到连接到服务器时有相当多的延迟。我只是注意到他们也有websocket API。根据我读到的,他们都有一些优点/缺点。但对于我想做的事情,由于速度在这里特别重要,您会推荐哪种API?websocket真的更快吗


谢谢大家!

对于您所描述的内容,最有效的操作是在客户端和服务器之间使用webSocket连接,只有当价格发生了有意义的变化或者经过了最短的时间并且价格发生了变化时,服务器才通过webSocket将更新的价格信息直接发送给客户端变了

这可能比让客户不断要求新的价格变化更有效,而且新信息到达客户的时间安排可能更及时

因此,如果您对新价格级别的信息到达客户机的速度感兴趣,webSocket可以更及时地到达客户机,因为服务器可以在新价格信息在服务器上发生变化时直接将其发送给客户机。而使用REST调用时,客户机必须在某个固定的时间间隔上进行轮询,并且只能在轮询间隔点上获取新数据

webSocket在您的网络基础设施上也可以更快、更简单,因为与为每个REST/Ajax调用创建新连接、发送新数据然后关闭连接相比,通过已经打开的webSocket连接发送数据包所涉及的网络操作更少。这在您的特定应用程序中会产生多大的差异/改进,这是您必须衡量才能真正了解的

但是,WebSocket的设计是为了帮助您处理特定场景,即客户机希望知道(尽可能接近实时)服务器上的某些更改,因此我肯定认为这将是此类使用的首选设计模式


这里比较了在已经打开的webSocket上发送价格变动与拨打REST电话所涉及的网络操作

webSocket

  • 服务器发现价格已更改,并立即向每个客户端发送消息
  • 客户收到关于新价格的消息
  • Rest/Ajax

  • 客户端设置轮询间隔
  • 在下一次轮询间隔触发时,客户端创建到服务器的套接字连接
  • 服务器收到打开新套接字的请求
  • 当和服务器建立连接时,客户端向服务器发送获取新定价信息的请求
  • 服务器接收新定价信息的请求,并发送带有新数据的回复(如果有)
  • 客户收到新的定价数据
  • 客户端关闭套接字
  • 服务器接收到套接字关闭
  • 正如您所看到的,从网络的角度来看,Rest/Ajax调用中还有很多内容,因为每个新调用都必须建立一个新连接,而webSocket使用的是一个已经打开的调用。此外,在webSocket的情况下,当新数据可用时,服务器只向客户端发送新数据——客户端不必定期请求


    如果定价信息不经常更改,REST/Ajax场景也经常会有“不做任何事情”调用,其中客户端请求更新,但没有新数据。webSocket案例从未出现过这种浪费案例,因为服务器在数据可用时只发送新数据。

    操作的速度将完全取决于服务器。唯一的答案是两种方法都尝试一下,看看什么最适合你的应用程序。我不知道为什么人们会投票以“基于意见”的方式关闭这个应用程序。与使用REST的Ajax调用相比,webSocket是向客户机交付实时数据的更好选择,这有很好的、基于事实的逻辑原因。这根本不是意见——事实上,这就是为什么webSockets被设计成比Ajax调用更好地改进/解决这个问题的原因。所有关于“A比B好”的问题基本上都不是基于意见的。很多问题都可以用事实、逻辑和非主要观点的参考来回答。投票重开。这个问题的答案不必“主要是基于观点的答案”。这里的一些人太快了,他们试图结束一些简单地问A是否比B好的问题,而不了解答案是否可以提供事实、逻辑和参考,而不仅仅是意见。看看下面的一个答案,问问自己这个答案是否“主要是观点”。我想不是。这是基于事实,了解这两个选项是如何工作的,以及如何将它们应用于被问及的问题。@jfriend00如何投票支持重新开放?有没有选择的旗帜重新开放投票?你的回答真的很有帮助。我真的在寻找更多关于这方面的信息(希望,大多数人也在寻找同样的信息)。@shaikmoeed-问题的关键词下有一些链接,包括“重新打开”链接(可能只显示给有足够声誉的人-我不知道)。点击它,你可以“投票重开”。如果它得到足够的重新投票,那么问题就会重新开始。非常感谢,这真的很有帮助!