IM学习

IM

实时性

发展:

  1. 短轮询:

  • 缺点:无脑消耗资源,因为有的时候并没用新的数据产生

  • 优点:技术和维护简单

长轮询:

  • 优点:降低了服务器请求负载,实时性有所提升,因为是主动等

  • 缺点:1. 在等待消息的过程中服务器需要开启消息查询线程,仍然存在无用功

    2. 实时性还存在不足:在轮询结束和下一次轮询发起之间的时间间隔之内仍有盲区

总结:轮询技术都存在实时性不足的缺点,因为HTTP协议的请求-----响应-----断开

归根到底,想要基于HTTP协议来实现IM,要达到真正的“实时性”,是相当勉强的。因为HTTP设计的目的,就是用“短连接”来简化传统TCP长连接通信带来的复杂性,而IM的实时性恰好要用到的又是TCP的长连接特性,所以这就是个悖论

2 . WebSocket

真正的实时性,大幅降幅负载,网络开销降低

建立连接:基于TCP,复用HTTP握手通道

数据帧(消息的最小单位)格式:

字段详细解释:http://www.52im.net/thread-3134-1-1.html

掩码算法:

数据传输:客户端和服务端建立连接后:后续的操作都是基于数据帧的传递,根据opcode来区分操作

  1. 数据分片:根据FIN来判断是否为最后一帧,opcode在数据交换的场景下表示的是数据类型

 

连接保持,心跳:

ping,pong

 

数据掩码的作用:首先并不是为了防止数据泄密,是为了防止早起协议版本的代理缓存污染攻击

在 WebSocket 协议中,客户端和服务器之间的数据传输可以使用数据掩码进行保护。发送方在发送数据之前,对数据内容进行掩码操作,而接收方在接收到数据后,对数据进行反掩码操作。掩码密钥(Masking Key)是一个随机生成的 32 位密钥,用于数据掩码和反掩码。

WebSocket 数据掩码的目的是增加数据传输的安全性,防止恶意中间人攻击,例如数据窃取、篡改、重放等。掩码的引入使得中间人很难识别和修改传输的数据内容,因为掩码密钥只在发送方和接收方之间共享,中间人无法得知。

然而,需要注意的是,WebSocket 数据掩码主要是为了保护数据传输过程中的安全性,而不是为了提供端到端的加密。虽然数据掩码可以防止一些简单的攻击,但它并不是一种全面的安全解决方案。对于敏感数据的传输,建议使用更强大的端到端加密机制,例如使用 SSL/TLS 建立加密的 WebSocket 连接。

posted @ 2023-05-17 15:43  山野村夫01  阅读(44)  评论(0编辑  收藏  举报