基于ws协议的某音直播弹幕

前言

免责声明:

本文内容仅供学习交流使用,本文章旨在学习直播间的websocket技术protobuf协议,完善我们Chatbox,请勿用于其他用途, 如因使用本文内容而产生任何问题,后果自负,如若侵权,请联系
3215421266@qq.com删除

前文链接:
https://mp.weixin.qq.com/s/DVbc2IJ0H466OD9z6ac0Rw

先看效果

image

本文思维导图

image
通过本文你将学会
:

  • ping(心跳机制)
  • ACK确认机制
  • gzip加密技术
    之后我们就可以用python中websocketapp模块,构成websocket请求

image

此时运行改程序
我们在on_message里面打印,发现全打印的是二进制文件

image

image

具体原因可以看我上一期文章:https://mp.weixin.qq.com/s/DVbc2IJ0H466OD9z6ac0Rw
原因是使用了protobuf进行文件结构的构建和传输
看一下我们自己写的Chatbox

image
发现我们传输的时候二进制了

我们看一下某音是如何传输的

image
我们直接在onMessage里面打上断点,进入e方法

1.进一步进入receiveMessage方法
image
发现里面传的第一个数据即二进制数据

image
2.1在transport.decode里面解密了,进入里面
发现他断到了decodeFrameor…方法里面

image
我们先看一下这个函数返回值是什么

image
里面可以看到有一些明文数据了,也有一些如payload一样的二进制数据

image
而我们传进去的参数e是二进制数据,那么我们大胆猜测该数据在_decodeFrameOrResponse中进行加密(解密),
我们跟进去看看

3.0
发现t函数传入是二进制
,输出却有一部分明文,跟进去看看

image
3.0.1

image
3.0.1.1继续跟进去

image
即发现他是怎么定义数据的,我们按照他的形式定义proto文件

image
其他参数也这么找

2.2发现有个ack的东东,并且websocket也发送了这个包,那么有啥用捏,点进去看看
image
2.2.1

image
返回一个自己之后发送了,经查询该ack是

ACK确认机制

  • 确保消息的可靠传递
  • 让服务器知道客户端是否成功接收消息
  • 维护消息的顺序性和完整性
    ok,继续回到2.0后面就没啥了
    我们回到1.0

image
1.1 onopen里面发现了ping()函数

image
1.1.1跟入看看
发现他也发送了这个包
image
查询心跳机制:

  • 保持WebSocket连接活跃
  • 及时发现连接断开
  • 防止因网络设备(如防火墙)的超时设置导致连接被关闭

image

基于此我们找到了所以proto文件和机制
image

接下来连接websocket即可,最终效果如下图:

image
在本文我们通过学习某音直播弹幕技术,主要进行了一下三步:

  • ping(心跳机制)
  • ACK确认机制
  • gzip加密技术

我们将在本系列下篇文章引入进我们的Chatbox

项目地址:https://github.com/mingheyan/Chatbox 将持续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值