HTTP长连接
HTTP1.1协议具备的,TCP连接一直不断保持着,Connection:keep-alive头来验证是否支持。
Web交互方式
普通轮询:普通的前后端通信方式,请求中多半无用,可以使用HTTP长连接技术;可以使用AJAX(XMLHttpRequest类),也可以使用ifram方式请求;实时性差。
长轮询:对于有实时性要求的场景(其实在两次连接之间,还是会有实时性问题),客户端发送请求后,后端hold住,有数据时才返回,客户端收到后断开,再启用新的请求进行连接,通过这样的方式模拟服务端推送。节省了反复建立连接的开销,但是服务器端会一直while保持着连接消耗资源,服务器端需要设置好超时时间(set_time_limit),有数据时返回(flush&ob_flush)超时时间内如果没有数据返回,则需要跳出断开连接,以免死循环。这种模式被称为反向AJAX/Comet,由服务器端进行数据实时推送。问题是:服务端开销依然很大,每次通信都需要一次请求,HTTP请求头中带大量Cookie等信息,浪费带宽。IE不支持AJAX,因此需要iframe代替。
SSE(Server-Sent Evetns):HTML5的Comet方案。SSEAPI创造到服务器端的单向连接,服务端推送的模式,服务器响应的MINE必须是“text/event-stream”,用于服务器端给客户端实时传数据,只进行一次连接,则后续服务端可以一直传送数据。
数据流:在长轮询的基础上,收到数据后不要断开连接,继续接受服务端数据;由于数据流是不断的,所以需要客户端自己来处理解析数据和管理游标,增量处理获得的数据,增加了逻辑复杂度。
Websocket:替代长轮询方式,减少开销。