即时通讯-伪即时通讯
即时通讯¶
- 即时通讯(Instant Messaging)是一种基于互联网的即时交流消息的业务
- 分为
在线push
(web页面 和 App),和离线push
(更适合安卓和ios) - 我们可以自己实现即时通讯,但是使用一些第三方现成的服务商提供的接口
- 常用的场景:比如用户给某个用户投硬币或者素质三连,我们需要给被承受的一方提供推送xxx信息
传统的推送实现¶
HTTP/1.x 不支持服务器主动推送,只能在客户端发起请求后做出回应(HTTP/2支持服务器主动推送,但HTTP/2 还未全面实施)
论询¶
- 轮询是在特定的的时间间隔(如每1秒)由客户端对服务器发出HTTP请求,了解服务器有没有新的信息,然后由服务器告知有无新数据或返回最新的数据给客户端
- 但是如果你有十万个用户在线,那你每秒就要处理十万个这样无用的链接0.0贼j费资源,必须不停连接.或者连接始终打开
- 然而HTTP请求可能包含较长的头部.其中真正有效的数据可能只是很小的一部分
Comet:长论询(基于长链接)¶
- 长轮询是在打开一条连接以后保持,等待服务器推送来数据再关闭的方式
- 其实就是服务器那里阻塞了,有消息过来,然后解开阻塞,给客户端发过去
- iframe流方式是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间创建一条长链接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript)
- 当服务端没有数据更新的时候,连接会保持一段时间周期知道数据或者状态改变或者过期,依次减少无效的客户端和服务端的交互
- 依然需要发送无用的请求,而且长链接也是需要消耗系统资源滴
心跳检测¶
- 客户端每隔N秒向服务端发送一个心跳消息,服务端收到心跳消息后,回复同样的心跳消息给客户端
- 如果服务端或客户端在M秒(M>N)内都没有收到包括心跳消息在内的任何消息,即心跳超时,我们就认为目标TCP连接已经断开了