跳转至

即时通讯-伪即时通讯

即时通讯

  • 即时通讯(Instant Messaging)是一种基于互联网的即时交流消息的业务
  • 分为在线push(web页面 和 App),和离线push(更适合安卓和ios)
  • 我们可以自己实现即时通讯,但是使用一些第三方现成的服务商提供的接口
  • 常用的场景:比如用户给某个用户投硬币或者素质三连,我们需要给被承受的一方提供推送xxx信息

传统的推送实现

HTTP/1.x 不支持服务器主动推送,只能在客户端发起请求后做出回应(HTTP/2支持服务器主动推送,但HTTP/2 还未全面实施)

论询

  • 轮询是在特定的的时间间隔(如每1秒)由客户端对服务器发出HTTP请求,了解服务器有没有新的信息,然后由服务器告知有无新数据或返回最新的数据给客户端
  • 但是如果你有十万个用户在线,那你每秒就要处理十万个这样无用的链接0.0贼j费资源,必须不停连接.或者连接始终打开
  • 然而HTTP请求可能包含较长的头部.其中真正有效的数据可能只是很小的一部分 39240-ezqe6gans1h.png

Comet:长论询(基于长链接)

  • 长轮询是在打开一条连接以后保持,等待服务器推送来数据再关闭的方式
  • 其实就是服务器那里阻塞了,有消息过来,然后解开阻塞,给客户端发过去
  • iframe流方式是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间创建一条长链接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript)
  • 当服务端没有数据更新的时候,连接会保持一段时间周期知道数据或者状态改变或者过期,依次减少无效的客户端和服务端的交互
  • 依然需要发送无用的请求,而且长链接也是需要消耗系统资源滴 20045-neoz7prxyda.png

心跳检测

  • 客户端每隔N秒向服务端发送一个心跳消息,服务端收到心跳消息后,回复同样的心跳消息给客户端
  • 如果服务端或客户端在M秒(M>N)内都没有收到包括心跳消息在内的任何消息,即心跳超时,我们就认为目标TCP连接已经断开了 69242-uckm4pe483q.png