2016-07-27 75 views

回答

0

如果您想要实际的服务器推送,那么您将需要webSocket或服务器发送的事件。由于服务器发送的事件是非常新的(并且在很多浏览器中不支持),所以实际服务器推送的主要选项是webSocket连接。

在webSocket架构中,客户端连接到服务器,然后保持连接状态。这允许服务器随时通过该连接向客户端发送数据。

服务器发送的事件是一个类似的体系结构,但具体使用方式不同。


没有办法在实际的服务器推送中使用Ajax。有时使用Ajax通过使用通常称为长轮询的方式模拟服务器发送的事件。在这种情况下,客户端发起Ajax调用,服务器暂时挂在Ajax请求上,而不是立即返回响应。如果服务器端事件在此期间到达,则服务器可以接收等待响应的连接并发送响应。客户端将得到响应,处理它,然后进行另一个Ajax调用。在长时间轮询中,如果稍后没有发生服务器端操作,则Ajax调用超时,客户端必须启动新的连接。

长轮询的整个连接序列的效率通常低于webSocket连接。因此,如果您要解决的主要问题是服务器推送,那么webSocket连接可能是最有效的方式,并得到广泛支持。

下面是一些类似的问题和答案,其中包含更多的讨论:websocket vs rest API for real time data?Ajax vs Socket.io

+0

只是额外的贡献:所有浏览器都支持除IE以外的SSE,但您可以使用现有库为SSE提供基本支持。 当通信在一个方向(服务器到客户端)时,我总是会选择SSE,因为它更容易实现,而且您不必关心连接失败和处理重新连接。 如果您使用java,也许这是有用的:https://github.com/mariomac/jeasse – Mario

+0

谢谢!我正在努力实现web-sockets现在,但我想看看SSE,你知道任何教程使用python/Tornado吗? –