首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >websocket与rest API用于实时数据?

websocket与rest API用于实时数据?
EN

Stack Overflow用户
提问于 2015-02-20 01:51:28
回答 1查看 19.7K关注 0票数 34

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-20 06:36:19

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

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

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

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

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

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

webSocket

  1. 服务器会发现价格已更改,并立即向每个客户端发送一条消息。
  2. 客户端将收到有关新价格的消息。

Rest/Ajax

interval

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

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

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

票数 77
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28613399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档