斗鱼弹幕抓取的最小实现
0x00
花了几个小时实现了第一个简单版本
代码位置
https://gist.github.com/finghine/b914d58681e4062ccc1e30b9dc97e731
功能
- 正常连接弹幕服务器,输出弹幕
实现细节
- 实现收数包的解析和发数据包的拼装
- 实现网络字节序与主机字节序的相互转化
特点
- 100行代码,代码简单
- 只用了socket io 方式,未使用异步 io,流程简单
还没有实现/待优化的
- 心跳包功能
- 服务器参数获取的一些流程
- 对于缓冲区的处理
- 对相关参数的解析及结构化参数
0x01 主要流程
- 连接弹幕服务器(这个地址是)
- 发送登录包
- 接收答复信息
- 发出加入分组信息
- 接收弹幕
0x02 涉及的知识点
网络字节序与主机字节序
参考
http://blog.csdn.net/aitangyong/article/details/23204817
http://blog.sina.com.cn/s/blog_8f3de32501010yyf.html
字节流的操作
对于 inputstream的 read(byte [] buf )方法
有两种情况下会返回,第一种 buf读满了,第二种流中数据读完了。
但在这个场景中,一个流中可能和几个数据单元,也可能一个数据单元被分成了两部分。
所以在读流的时候,要对长度进行把控。
0x03 自己耗时比较长位置的总结
- 在处理网络字节序与主机字节序走了一些弯路,抓包对比花了些时间
- 参数字符写反,抓包对比花了些时间
- 在连接处理字节流时,先是没控制长度,读错位,后是连错了弹幕服务器,本来就是阻塞,还以是自己程序的问题,又查了些时间。
- 实践出真实,文档什么及参考代码并不会那么可靠
斗鱼弹幕抓取的最小实现
https://blog.fengcl.com/2017/06/13/douyu-danmu-collector-minimal-implementation/