【问题标题】:websocket vs rest API for real time data? [closed]用于实时数据的 websocket vs REST API? [关闭]
【发布时间】:2015-04-21 05:05:43
【问题描述】:

我需要不断访问服务器以获取金融工具的实时数据。价格不断变化,所以我需要每 0.5 秒请求一次新价格。代理的 REST API 让我可以做到这一点,但是,我注意到连接到服务器时有相当长的延迟。我只是注意到他们也有 websocket API。根据我阅读的内容,它们都有一些优点/缺点。但是对于我想做的事情,并且因为速度在这里特别重要,如果 API 你会推荐哪种? websocket真的更快吗?

谢谢!

【问题讨论】:

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

标签: python rest websocket httprequest


【解决方案1】:

对于您所描述的内容,最有效的操作是在客户端和服务器之间使用 webSocket 连接,并让服务器仅在价格发生有意义的变化或何时通过 webSocket 直接向客户端发送更新的价格信息一些最短时间已经过去,价格发生了变化。

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

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

WebSocket 在您的网络基础设施上也可以更快、更容易,因为与为每个 REST/Ajax 调用创建新连接、发送新数据然后关闭连接。这在您的特定应用程序中产生了多少差异/改进,您必须测量才能真正了解。

但是,webSockets 旨在帮助您处理特定场景,即客户端想要知道(尽可能接近实时)服务器何时发生更改,因此我肯定认为这将是首选的设计模式这种用途。


以下是通过已打开的 webSocket 发送价格变化与进行 REST 调用所涉及的网络操作的比较。

webSocket

  1. 服务器发现价格发生变化并立即向每个客户端发送消息。
  2. 客户收到有关新价格的消息。

休息/Ajax

  1. 客户端设置轮询间隔
  2. 在下一次轮询间隔触发时,客户端创建到服务器的套接字连接
  3. 服务器收到打开新套接字的请求
  4. 与服务器建立连接后,客户端向服务器发送新定价信息的请求
  5. 服务器收到对新定价信息的请求,并发送包含新数据的回复(如果有)。
  6. 客户收到新的定价数据
  7. 客户端关闭套接字
  8. 服务器收到套接字关闭

正如您所见,从网络的角度来看,Rest/Ajax 调用还有很多事情要做,因为必须为每个新调用建立一个新连接,而 webSocket 使用已经打开的调用。此外,在 webSocket 的情况下,服务器只是在新数据可用时向客户端发送新数据 - 客户端不必定期请求它。

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

【讨论】:

  • 非常感谢,这真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 2011-10-11
  • 2014-09-17
  • 1970-01-01
  • 2016-05-08
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多