我目前正在Tornado(python)中开发一个状态面板。每当调用外部函数时,我需要动态更新网页(通过重新呈现模板)。我很好奇,实现这一目标最有效的方法是什么?他们有类似的教程吗。
如果您想要实际的服务器推送,那么您将需要webSocket或服务器发送的事件。由于服务器发送的事件是非常新的(在很多浏览器中都不支持),所以实际服务器推送的主要选项是webSocket连接。
在webSocket体系结构中,客户端连接到服务器,然后保持连接。这允许服务器在任何时候通过该连接向客户端发送数据。
服务器发送的事件是类似的体系结构,但其使用方式有不同的实现细节。
没有办法将Ajax用于实际的服务器推送。Ajax有时用于通过使用通常称为长轮询的方法来模拟服务器发送的事件。在这种情况下,客户端进行Ajax调用,服务器只是挂起Ajax请求一段时间,而不是立即返回响应。如果在此期间服务器端事件到达,则服务器可以获取正在等待响应的连接并发送响应。客户端将获得响应,对其进行处理,然后进行另一个Ajax调用。在长轮询中,如果一段时间后没有发生服务器端操作,Ajax调用就会超时,客户端必须启动一个新的连接。
具有长轮询的整个连接序列通常不如webSocket连接高效。因此,如果你试图解决的主要问题是服务器推送,那么webSocket连接可能是最有效的方法,并且受到广泛支持。
以下是一些类似的问题和答案,其中包含更多的讨论:websocket与实时数据的rest API?以及Ajax与Socket.io.