websocket vs rest API 实时数据?

websocket vs rest API for real time data?

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

谢谢!

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

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

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

webSocket 在您的网络基础设施上也可以更快更容易,因为与为每个 REST/Ajax 调用创建新连接相比,只需通过已经打开的 webSocket 连接发送数据包所涉及的网络操作更少,发送新数据,然后关闭连接。这在您的特定应用程序中产生了多少 difference/improvement 将是您必须测量才能真正知道的东西。

但是,webSockets 旨在帮助您解决特定的场景,在这种情况下,客户端想要知道(尽可能接近实时)服务器上的某些内容何时发生变化,因此我肯定认为这将是首选设计此类用途的模式。


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

webSocket

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

Rest/Ajax

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

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

如果定价信息不经常更改,REST/Ajax 场景也会经常有 "do-nothing" 客户端请求更新但没有新数据的调用。 webSocket 案例从来没有这种浪费案例,因为服务器只在新数据可用时发送新数据。