websocket vs rest API用于实时数据?

时间:2015-02-19 17:51:28

标签: python rest websocket httprequest

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

谢谢!

1 个答案:

答案 0 :(得分:40)

您所描述的最有效的操作是在客户端和服务器之间使用webSocket连接,并让服务器通过webSocket直接向客户端发送更新的价格信息,当价格变化一些有意义的数量时或者当一些最小的时间已经过去,价格已经改变。

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

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

webSocket在您的网络基础架构上也可以更快更轻松,因为简单地通过已打开的webSocket连接发送数据包所需的网络操作较少,而不是为每个REST / Ajax调用创建新连接,发送新数据,然后关闭连接。在您的特定应用程序中,这会产生多大的差异/改进,这是您需要衡量才能真正了解的。

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


以下是对已经开放的webSocket发送价格变化与进行REST呼叫所涉及的网络操作的比较。

<强>的WebSocket

  1. 服务器发现价格已发生变化,并立即向每个客户发送消息。
  2. 客户收到有关新价格的消息。
  3. <强>休息/ AJAX

    1. 客户端设置轮询间隔
    2. 在下一个轮询间隔触发器时,客户端创建到服务器的套接字连接
    3. 服务器收到打开新套接字的请求
    4. 当与服务器建立连接时,客户端会向服务器发送新的定价信息请求
    5. 服务器收到新定价信息的请求,并发送带有新数据的回复(如果有)。
    6. 客户收到新的定价数据
    7. 客户关闭套接字
    8. 服务器收到套接字关闭
    9. 正如您所看到的,从网络角度来看,在Rest / Ajax调用中还有很多事情要发生,因为必须为每个新调用建立新连接,而webSocket使用已经打开的调用。此外,在webSocket案例中,服务器只在新数据可用时向客户端发送新数据 - 客户端不必定期请求它。

      如果定价信息不经常变化,那么REST / Ajax场景也经常会在客户端请求更新的情况下进行“无操作”调用,但没有新数据。 webSocket案例从来没有那么浪费,因为服务器只在可用时发送新数据。