当前位置: 首页 > 面试题库 >

websocket vs rest API实时数据?

包丁雨
2023-03-14
问题内容

我需要不断访问服务器以获取金融工具的实时数据。价格一直在变化,因此我需要每0.5秒请求新的价格。代理程序的REST API允许我执行此操作,但是,我注意到连接到服务器时会出现一些延迟。我只是注意到他们虽然也有websocket API。根据我的读物,他们两个都有优点/缺点。但是对于我想做的事情来说,由于速度在这里特别重要,因此您会建议使用哪种API?websocket真的更快吗?

谢谢!


问题答案:

您所描述的最有效的操作是使用客户端和服务器之间的webSocket连接,只有在价格发生有意义的变化或达到最小值时,才让服务器通过webSocket将更新的价格信息直接发送给客户端。时间的流逝,价格已经改变。

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

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

WebSocket还可在您的网络基础架构上更快,更轻松,这仅仅是因为涉及较少的网络操作,从而仅通过已打开的webSocket连接发送数据包,而不是为每个REST / Ajax调用创建一个新连接,发送新数据,然后关闭该连接。这将使您真正了解特定应用程序的差异/改进有多大。

但是,webSockets旨在帮助您解决特定情况,即客户端希望知道服务器上发生什么变化时(尽可能接近实时),因此,我肯定会认为这是此类类型的首选设计模式用。

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

webSocket

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

Rest/Ajax

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

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

如果定价信息不是很频繁地更改,则REST / Ajax方案也经常会在客户端请求更新但没有新数据的情况下进行“不执行任何操作”调用。由于服务器只是在可用时发送新数据,因此webSocket情况永远不会浪费资源。



 类似资料:
  • 随着实时数据量的迅速增长,人们对数据能够即时显示在手机、计算机上的需求越来越强烈。客户端与服务器之间对实时数据传输一般采用 WebSocket 协议、TCP 协议、HTTP 协议以及 Kafka 专用通讯协议等,可传输的数据格式包括 CSV、JSON 、GeoJSON等。 本节以查询一个线数据为例,每两秒将一个点通过 dataFlowService 传输给服务器,用来模拟实时数据。 //实例化 D

  • 我在一个Android应用程序中使用Firebase数据库,每次用户启动时,我都会在数据库中存储一些值,为此我会执行以下操作: 正如您在子方法中看到的,如果称为“usrId”,它将创建usrId目录,并在其中添加所有neccesary信息。但是我想为每个用户创建目录,所以我尝试传递usrId变量作为参数。但它不起作用。当我调试代码时,调试器说本地var usrId无法识别,我的问题是如何在Fire

  • Sentinel 提供对所有资源的实时监控。如果需要实时监控,客户端需引入以下依赖(以 Maven 为例): <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-transport-simple-http</artifactId> <version>x.y.z</version> </de

  • 2.15 实时带宽数据(边缘) 2.15.1 描述 返回5分钟颗粒度的带宽明细数据,主要返回时间戳、省份、运营商、HIT/MISS、带宽值(bit) .15.2 请求地址 地址: https://api.bokecs.com/channel/bandwidthDetail?time={time}domain={domain} 2.15.3 请求方式 GET 2.15.4 请求参数 参数名称 是否必

  • 1.自我介绍 2.你对redis宕机后的方法 我:...... 3.你说到算法。你有刷过letcode算法? 我:很少刷letcode,一般都是刷sql的 3.kafka的副本同步 我:忘了 4.谈谈你对数仓的理解 我:..... 5.谈谈你对hbase和clickhouse的理解 我:.... 6.你说你对hive中的ads层数据导入到MySQL,为什么不是直接从hive的ads层中访问 我:不

  • 我使用Firebase,确切地说是一个实时数据库,我不知道应该设置什么规则。我制定了以下规则: 但现在每个人都可以写作了。当我设置这些: 使用Gmail的用户无法登录,因为数据库中的记录没有创建,但不是在所有设备上。当我在OnePlus上测试时,一切都很好,当我在三星上测试时,数据库中的记录没有创建。这是我负责创建用户的代码:

  • 我一直试图运行事务方法,但它无法在firebase数据库中获取和设置正确的数据。 代码如下:

  • 诸葛io设计为开放的架构,让用户可以订阅实时数据来满足更多使用场景。服务端接到一条 SDK 发来的数据后,会对数据做一些预处理并将数据写入到消息队列。 Kafka 供下游各类计算模块使用。本文将介绍订阅 Kafka 数据的方法。 一、配置要求 订阅数据需要满足以下要求: 启动订阅的机器需与部署诸葛io的机器在同一个内网; Kafka 版本请使用 0.8.2.x; 目前仅支持私有部署版通过 Kafk