Web端即时通讯技术简介
HTTP协议
HTTP 协议构建于 TCP/IP 协议之上,是一个应用层协议,默认端口号是 80
HTTP 是无连接无状态的
详细介绍:https://hit-alibaba.github.io/interview/basic/network/HTTP.html
HTTP 2.0:https://juejin.cn/post/6844903984524705800
WebSocket协议
WebSocket协议是HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。
- WebSocket可以在浏览器里使用
- 支持双向通信
- 使用很简单
详细介绍:https://www.cnblogs.com/chyingp/p/websocket-deep-in.html
Web端即时通讯技术
即时通讯技术简单的说就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反应到客户端,例如消息即时推送等功能都是通过这种技术实现的。
但是在Web中,由于浏览器的限制,实现即时通讯需要借助一些方法。这种限制出现的主要原因是,一般的Web通信都是浏览器先发送请求到服务器,服务器再进行响应完成数据的现实更新。
Web端即时通讯技术的四种实现:
- 短轮询
- 长轮询(comet)
- 长连接(SSE)
- WebSocket
从兼容性角度考虑,短轮询>长轮询>长连接>WebSocket;
从性能方面考虑,WebSocket>长连接>长轮询>短轮询。
短轮询
短轮询的基本思路就是浏览器每隔一段时间向浏览器发送HTTP请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。
这种方式实现的即时通信,本质上还是浏览器发送请求,服务器接受请求的一个过程,通过让客户端不断的进行请求,使得客户端能够模拟实时地收到服务器端的数据的变化。
长轮询(comet)
长轮询通过客户端和服务端的配合,达到主动权在客户端,同时也能保证数据的实时性;长轮询本质上也是轮询,只不过对普通的轮询做了优化处理,服务端在没有数据的时候并不是马上返回数据,会保持住请求,等待服务端有数据,或者一直没有数据超时处理,然后一直循环下去。
此外,HTTP流也可以实现comet。它在页面整个生命周期内只使用一个HTTP连接,具体使用方法即页面向浏览器发送一个请求,而服务器保持tcp连接打开,然后不断向浏览器发送数据。
长连接(SSE)
严格地说,HTTP 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming)。也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一次用时很长的下载。SSE 就是利用这种机制,使用流信息向浏览器推送信息。它基于 HTTP 协议,目前除了 IE/Edge,其他浏览器都支持。
服务器发送事件(Server Sent Events)API用于创建到服务器的单向连接,服务器通过这个连接可以发送任意数量的数据。服务器响应的MIME类型是text/event-stream,而且浏览器中的JS API能够解析格式输出。SSE支持短轮询、长轮询、HTTP流,而且能在断开连接时自动确定合适重新连接。