Websocket和REST API哪个更适合实时数据?

40

我需要不断地访问服务器以获取金融工具的实时数据。价格在不断变化,因此我需要每0.5秒请求新的价格。经纪人的REST API可以让我这样做,但是当连接到服务器时,我注意到存在一定的延迟。我刚刚注意到他们也有websocket API。根据我的阅读,它们都有一些优缺点。但对于我想要做的事情,而且速度特别重要,你会推荐哪种API? Websocket确实更快吗?

谢谢!


1
操作速度完全取决于服务器。唯一的答案是尝试两种方法,看哪种对您的应用程序最有效。 - Austin Mullins
14
我不知道为什么人们要将这个问题标记为“基于观点的”。使用webSocket提供实时数据给客户端比使用REST的Ajax调用有很好的、基于逻辑事实的原因。这并不是观点,实际上这就是为什么webSockets被设计来比Ajax调用更好地解决此问题的原因。所有关于A是否比B更好的问题并不主要是基于观点的。许多可以用事实、逻辑和引用进行回答,这些并不主要是基于观点的。 - jfriend00
39
投票以重新开放。这个问题可以被回答,而不必是“基本上是基于观点的答案”。有些人在不理解回答是否可以用事实、逻辑和参考资料提供而仅仅基于意见时,过于迅速地试图关闭某些简单地询问A是否比B更好的东西。看看下面的一个回答,问问自己那个答案是否“主要是意见”。我认为不是。它基于事实,理解两个选项的工作方式以及它们如何应用于所询问的问题。 - jfriend00
@jfriend00 怎样投票以重新开放?没有重新开放的标记选项可以投票吗?你的回答真的很有帮助(+1)。我真的在寻找更多关于此事的信息(希望大多数人也在寻找同样的信息)。 - shaik moeed
@shaikmoeed - 在问题关键字下面有一些链接,包括一个“重新打开”的链接(可能只对声望足够高的人显示 - 我不知道)。 点击它,您可以“投票重新打开”。 如果获得足够的重新打开票数,则问题将被重新打开。 - jfriend00
1
@jfriend00 你说得对。需要3k+的声望才能投票重新开放。我刚刚获得了这个特权。 - shaik moeed
1个回答

92
你所描述的最有效操作是在客户端和服务器之间使用webSocket连接,并且只有在价格发生实质性变化或经过一定时间后价格发生变化时,服务器才会通过webSocket直接将更新后的价格信息发送到客户端。这比让客户端不断地请求新的价格变化要更有效率,而且新信息到达客户端的时机也更加及时。
因此,如果你对于信息在新的价格水平上到达客户端的速度感兴趣,webSocket可以更加及时地将信息传输到客户端,因为服务器可以在其上发生变化的瞬间直接向客户端发送新的定价信息。而使用REST调用时,客户端必须按照固定的时间间隔轮询,并且只能在轮询间隔点上获取新数据。
webSocket还可以在网络基础设施方面更快、更便捷,因为与创建每个REST / Ajax调用的新连接,发送新数据,然后关闭连接相比,在已经打开的webSocket连接上发送一个数据包需要涉及更少的网络操作。但是,这种差异/改进在你特定应用程序中的实际影响有多大,你必须通过测量才能真正知道。
但是,webSockets旨在帮助解决特定情况,其中客户端想要尽可能接近实时地知道服务器上的某些更改,因此我肯定认为它是此类用途的首选设计模式。
下面是在已经打开的webSocket与进行REST调用时涉及的网络操作的比较。
  • 服务器收到请求新价格信息的请求,如果有新数据,发送带有新数据的回复。
  • 客户端接收新的定价数据。
  • 客户端关闭套接字。
  • 服务器接收到套接字关闭。
  • 从网络角度来看,在 Rest/Ajax 调用中有更多操作,因为每次新调用都必须建立一个新连接,而 WebSocket 使用已经打开的连接。此外,在 WebSocket 的情况下,只有在有新数据可用时,服务器才向客户端发送新数据 - 客户端不需要定期请求它。

    如果定价信息不会经常更改,REST/Ajax 方案也将经常出现 "无操作" 调用,即客户端请求更新,但没有新数据。WebSocket 情况下永远不会出现这种浪费情况,因为服务器只在有新数据可用时发送。


    1
    非常感谢,这真的很有帮助! - Luis Cruz

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接