ajax – WebSockets协议与HTTP
有很多关于websocket和HTTP的博客和讨论,许多开发人员和网站强烈主张websockets,但我仍然不明白为什么。
例如(websocket爱好者的参数):
1)为什么WebSockets协议更好?
WebSockets更适合涉及低延迟通信的情况,特别是对于客户端到服务器消息的低延迟。对于服务器到客户端数据,您可以使用长期连接和分块传输获得相当低的延迟。然而,这不会帮助客户端到服务器的延迟,这需要为每个客户端到服务器消息建立新的连接。 您的48字节HTTP握手对于真实世界的HTTP浏览器连接是不现实的,其中作为请求的一部分(在两个方向上)发送通常几千字节的数据,包括许多报头和cookie数据。以下是使用Chrome的请求/响应示例: 请求示例(2800字节,包括Cookie数据,490字节,无Cookie数据): GET / HTTP/1.1 Host: www.cnn.com Connection: keep-alive Cache-Control: no-cache Pragma: no-cache Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML,like Gecko) Chrome/24.0.1312.68 Safari/537.17 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: [[[2428 byte of cookie data]]] 响应示例(355字节): HTTP/1.1 200 OK Server: nginx Date: Wed,13 Feb 2013 18:56:27 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Set-Cookie: CG=US:TX:Arlington; path=/ Last-Modified: Wed,13 Feb 2013 18:55:22 GMT Vary: Accept-Encoding Cache-Control: max-age=60,private Expires: Wed,13 Feb 2013 18:56:54 GMT Content-Encoding: gzip HTTP和WebSockets具有相同大小的初始连接握手,但是对于WebSocket连接,初始握手执行一次,然后小消息只有6字节的开销(头部为2字节,掩码值为4字节)。延迟开销不是从头的大小,而是从逻辑到解析/处理/存储那些头。此外,TCP连接建立延迟可能是比每个请求的大小或处理时间更大的因素。 2)为什么实现它而不是更新HTTP协议? 有努力重新设计HTTP协议以实现更好的性能和更低的延迟,如SPDY,HTTP 2.0和QUIC.这将改善正常HTTP请求的情况,但是很可能WebSockets和/或WebRTC DataChannel将仍然较低客户端到服务器数据传输的延迟比HTTP协议(或者它将被使用在一个看起来很像WebSockets的模式)。 更新: 这里是一个思考Web协议的框架: > TCP:低级,双向,全双工和保证的顺序传输层。没有浏览器支持(通过插件/ Flash除外)。 参考文献: > HTTP: > Wikipedia HTTP Page >服务器发送事件: > W3C Server-Sent Events/EventSource Candidate Recommendation > WebSockets: > IETF RFC 6455 WebSockets Protocol > SPDY: > IETF SPDY Draft > HTTP 2.0: > IETF HTTP 2.0 httpbis-http2 Draft > WebRTC: > W3C WebRTC API Draft > QUIC: > QUIC Chrominum Project (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |