【发布时间】:2016-07-27 22:32:20
【问题描述】:
我目前正在使用 Tornado (python) 中的状态仪表板。每当调用外部函数时,我都需要动态更新网页(通过重新呈现模板)。我很好奇实现这一目标的最有效方法是什么?他们有没有类似的教程。
【问题讨论】:
标签: ajax python-3.x websocket tornado
我目前正在使用 Tornado (python) 中的状态仪表板。每当调用外部函数时,我都需要动态更新网页(通过重新呈现模板)。我很好奇实现这一目标的最有效方法是什么?他们有没有类似的教程。
【问题讨论】:
标签: ajax python-3.x websocket tornado
如果您想要实际的服务器推送,那么您将需要 webSocket 或服务器发送的事件。由于服务器发送的事件非常新(很多浏览器不支持),实际服务器推送的主要选项是 webSocket 连接。
在 webSocket 架构中,客户端连接到服务器,然后保持连接。这允许服务器随时通过该连接向客户端发送数据。
服务器发送的事件是类似的架构,但在使用方式上具有不同的实现细节。
没有办法将 Ajax 用于实际的服务器推送。 Ajax 有时用于通过使用通常称为长轮询的方式来模拟服务器发送的事件。在这种情况下,客户端进行 Ajax 调用,而服务器只是在 Ajax 请求上挂起一段时间,而不是立即返回响应。如果在此期间服务器端事件到达,则服务器可以获取正在等待响应的连接并发送响应。客户端将获得响应,对其进行处理,然后进行另一个 Ajax 调用。在长轮询中,如果一段时间后没有发生服务器端操作,Ajax 调用将超时,客户端必须启动新连接。
长轮询的整个连接序列通常比 webSocket 连接效率低。因此,如果您要解决的主要问题是服务器推送,那么 webSocket 连接可能是最有效的方法,并且得到广泛支持。
以下是一些包含更多讨论的类似问题和答案:websocket vs rest API for real time data? 和 Ajax vs Socket.io。
【讨论】: