Http协议
(超文本传输协议):是一种网络通信协议,它允许将超文本标记语言(HTML)文档从WEB服务器传送到客户端的浏览器。
超文本传输协议是一个简单的请求-响应协议,它通常运行在tcp之上。
websocket:
该协议是基于TCP的一种新的网络协议。它实现了浏览器和服务器之间的全双工通信,可以允许服务器主动发送信息给客户端。所以,在websocket中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变得更加简单。
两者区别:
相同之处:
- 两者都是基于tcp的,是可靠性传输协议
- 都属于应用层的协议
不同之处:
1.WebSocket是双向通信协议,模拟Socket协议,可以允许服务器主动发送信息给客户端,而HTTP是单向的。
2.WebSocket只需要浏览器和服务器握手一次建立连接
3.http是浏览器发起向服务器的连接,服务器预先并不知道这个连接。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
Http存在的问题:
1.http是一种无状态协议,客户端发送请求,服务端才能接收并知道哪个客户端发送的请求,永远不知道下一次发起请求的客户端是谁。
2.http协议每一次的请求和响应都需要大量请求头,解析这么多请求头,也会影响实时通信。
3.服务端只能被动通信,不能主动发送。
以往的解决方式:
长轮询和ajax轮询
长轮询存在的问题:
1.推送延迟。服务端数据发生变更后,长轮询结束,立刻返回响应给客户端。
2.服务端压力。长轮询的间隔期一般很长,例如 30s、60s,并且服务端 hold 住连接不会消耗太多服务端资源。
ajax存在的问题:
1.推送延迟。
2.服务端压力。配置一般不会发生变化,频繁的轮询会给服务端造成很大的压力。
3.推送延迟和服务端压力无法中和。降低轮询的间隔,延迟降低,压力增加;增加轮询的间隔,压力降低,延迟增高
websocket方式:
WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实现了“真·长链接”,实时性优势明显。
WebSocket有以下特点:
是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。
HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)