我正试图理解web套接字,但我目前很难掌握这个过程的每一部分。在客户端,我们有打开到服务器连接的WebSocket对象。无论何时有新数据,服务器都会将其传递给客户端,对吗?
这一切都很好,但是为了有新数据,服务器端脚本必须去获取它。在聊天应用程序中,我可以看到这是如何工作的,因为服务器一直在接收新消息。但如果新数据是推文呢?
在这个应用程序中,网页每秒钟更新一次新的Twitter数据。这是否意味着服务器端脚本每秒对Twitter API进行一次封装?考虑到与重复的HTTP请求相关的开销,以及Twitter设置的搜索限制,这似乎很奇怪。
简而言之,我理解浏览器-服务器连接,但我不理解服务器如何获得新数据,除非有一个脚本一遍又一遍地运行。
这实际上取决于您的应用程序正在做什么以及它与哪些第三方api交互。
一般来说,是的。如果您正在与第三方HTTP API进行交互,则通常仍然需要定期轮询。但是你可以保持一个HTTP保持连接打开,这将大大减少延迟。
然而,有些服务提供了流api,你可以在这种情况下利用。例如Twitter就提供了这样一个流API。您链接到的示例中使用的twitter客户端Tweepy支持使用twitter流API。这允许您在不轮询的情况下获得新的tweet。如果你想知道这是如何工作的,它发送一个HTTP请求,并获得一个无限流响应的换行分隔的JSON消息,这可以在飞行中处理。
其他服务可能提供不同的流媒体api。如果可能,选择流api而不是轮询,因为它可以减少延迟和不必要的网络流量。