IM学习
实时性
发展:
-
短轮询:
-
缺点:无脑消耗资源,因为有的时候并没用新的数据产生
-
优点:技术和维护简单
长轮询:
-
优点:降低了服务器请求负载,实时性有所提升,因为是主动等
-
缺点:1. 在等待消息的过程中服务器需要开启消息查询线程,仍然存在无用功
2. 实时性还存在不足:在轮询结束和下一次轮询发起之间的时间间隔之内仍有盲区
总结:轮询技术都存在实时性不足的缺点,因为HTTP协议的请求-----响应-----断开
归根到底,想要基于HTTP协议来实现IM,要达到真正的“实时性”,是相当勉强的。因为HTTP设计的目的,就是用“短连接”来简化传统TCP长连接通信带来的复杂性,而IM的实时性恰好要用到的又是TCP的长连接特性,所以这就是个悖论
2 . WebSocket
真正的实时性,大幅降幅负载,网络开销降低
建立连接:基于TCP,复用HTTP握手通道
数据帧(消息的最小单位)格式:
字段详细解释:http://www.52im.net/thread-3134-1-1.html
掩码算法:
数据传输:客户端和服务端建立连接后:后续的操作都是基于数据帧的传递,根据opcode来区分操作
-
数据分片:根据FIN来判断是否为最后一帧,opcode在数据交换的场景下表示的是数据类型
连接保持,心跳:
ping,pong
数据掩码的作用:首先并不是为了防止数据泄密,是为了防止早起协议版本的代理缓存污染攻击
在 WebSocket 协议中,客户端和服务器之间的数据传输可以使用数据掩码进行保护。发送方在发送数据之前,对数据内容进行掩码操作,而接收方在接收到数据后,对数据进行反掩码操作。掩码密钥(Masking Key)是一个随机生成的 32 位密钥,用于数据掩码和反掩码。