本人在用nodejs实现一个流媒体服务器,http协议;通过管道从编码器获取媒体二进制数据后,以长链接无限的大文件的形式向client输出(直播)。发现每隔14分钟左右,链接会中断,通过打日志确认与发送的数据长度无关;排除socket timeout的问题。目前无头绪,有高手了解不?
9 回复
自己顶一下。这个问题应该在所有http静态文件服务器实现上都会遇到啊(使用http.response),只要连续传输时间超过14分钟左右,就会收到response.event.close消息。——都没遇到??
问题已解决。 确认不关http.response的事。服务response输出的数据是由ChlidProcess.stdout获得的,问题出在子进程在stderr不断输出内容,而ChildProcess.spawn会默认的帮你打开stderr管道,你如果不读取stderr内容,一段时间后stdout管道也会塞住不输出。正确的做法是如果子进程特定管道输出内容不需要处理,需要用“Ignore”设置之。例如: require(‘child_process’).spawn('prg’, [], { stdio: ['pipe’, 'pipe’, ‘ignore’] });
相关手册好像没有说明这个情况,折腾了好久,真心悲剧。