tangguo

websocket vs rest API实时数据?

java

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

谢谢!


阅读 411

收藏
2020-10-20

共1个答案

小编典典

您所描述的最有效的操作是使用客户端和服务器之间的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情况永远不会浪费资源。

2020-10-20