01网页版即时通讯原理
http协议为无状态,单向性的协议。单向性:必须由客户端发起一个请求建立连接,服务器接收请求,把数据返回给客户端,典型的一请求一响应。
短轮询:浏览器通过循环或者setTimeout方法,每隔一段时间往后台发送一次请求,无限循环。
长轮询:不停地向后台请求数据,但是后台如果检测不到数据变动,就会将这个请求挂掉。如果检测到数据变动,就会响应这个请求变动数据。
长连接:在进行http数据传输的时候,在数据传输层一直开着一个TCP通道,所有请求资源文件都是通过复用这个通道去请求数据,有超时时间。
短连接:如果http进行的短链接,即每次浏览器发送请求,都会创建TCP通道,然后传输完成了再进行销毁,重复操作,消耗很大。
基于http即时通讯采用ajax短轮询的方案。带来的问题会产生带宽上的一个延迟,并且带来一个结果的延迟。短轮询来说太浪费了,请求的基本是无用的请求。大大损耗了性能。
02基于ajax长轮询方式
基于长连接的服务器推模型sse。
1. 服务器端会阻塞请求直到有数据传递或超时才返回。
2. 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
3. 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。
03Websocket通信:
也是html5中的协议,实现与服务端与客户端双向,基于消息的文本或二进制数据通信。适合于对数据的实时性要求很强的场景,如通信、直播、共享桌面,特别适用于客户与服务频繁交互的情况下。如实时共享,多人协作等平台。
采用新的协议,后端需要单独实现,客户端并不是所有浏览器都支持。