monkingame
2019-08-28 11:32:11 +08:00
再次回复,又切回 express 了,无语。。。
原因:
koa 有很奇特的小问题,暂时找不到问题原因。出于对未知坑的恐惧,只好选择 express 了。
问题现象:
就是写了个简单的 api server,根据 App 端请求返回 json 数据。
客户端用的 flutter,由于要播放视频(用的 video_player ),加上我懒,简单的加了个 static 中间件,然后把 mp4 文件放在 static 目录下,App 直接播放服务端视频就可以了。按理说这很简单了,而且我用浏览器测试了视频,可以正常播放,服务端也没有任何问题。但是 App 访问时,服务端出现了错误:
Error: write EPIPE
at WriteWrap.afterWrite [as oncomplete] (net.js:788:14)
并且 App 不能播放视频。
我 Google 了一通,也没找到很合适的答案。我怀疑是不是 App 端有问题,或者 video_player 本身有问题。但我直接 hard coding 公网服务器的视频,App 能正确播放。
但是,当我用 express 重写了一下,也是用的同样的视频文件,用 express static 中间件,还是刚才的 App (一个字节都没改写的),结果就没事了! App 视频完美播放,server 端没有任何错误提示!
神奇的现象,折腾了一晚上之后,决定放弃 koa,换成 express。
当然,有可能是我配置的 koa 不对,造成某些类型文件不能正确下发,比如对视频文件特殊处理等。但我用浏览器可以正常访问 koa 视频文件,预览正常,服务端没错误。
还好写的不多,一早上就把代码迁过去了(幸好 koa 和 express 差别也不大,都是 js 的框架,也有渊源)。
但是这个 EPIPE 错误一直没有解决,心里头总觉得膈应。
有哪位大佬有解决方案的,敬请指教,非常感谢!
结论:
api server 还是 express 吧。至少在 static 方面,我不知道如何解决 koa 的 EPIPE 问题。