斗鱼弹幕抓取的最小实现

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 自己耗时比较长位置的总结

  • 在处理网络字节序与主机字节序走了一些弯路,抓包对比花了些时间
  • 参数字符写反,抓包对比花了些时间
  • 在连接处理字节流时,先是没控制长度,读错位,后是连错了弹幕服务器,本来就是阻塞,还以是自己程序的问题,又查了些时间。
  • 实践出真实,文档什么及参考代码并不会那么可靠