绝对不要使用 ctx.body = request.get(stream_link)

在我的一个本地Server中,制作了一个解析视频网站视频流的API

大概的形式是这样的,

由 nodejs 向 视频网站请求流,然后使用ctx.body = request.get(stream_link)的方式向本地播放器输出流。

但是这其中有一个非常大的问题,就是在关闭播放器,KOA也获取到 ECONNRESET 错误的情况下,无法 destory Request的流。

这就导致即使关闭了播放器,nodejs依然在下载对应的那个视频,如果多切换几个视频,后台就会有多个下载任务占用带宽。

找了半天没有找到处理办法,KOA的相关讨论也只是说尽量不要给ctx.body设置为HTTP流。

最后直接Hack了一下,在app上直接监听Error事件,发生ECONNRESET的时候直接process.exit(0),反正后台有 forever的Daemon。

至少目前还没有找到可靠的处理方法。

如果可以处理的话,思路大概这样,将HTTP stream的引用暂存起来,读取ECONNRESET,并且与对应的ctx对应,找到 stream ,想办法结束流。

这个就留待以后实现吧,仅在此做一个记录