我有一个 node.js 脚本,它在守护进程模式下工作。该脚本会读取 IceCast ogg 流本身(即时)并将音频标签发送到网站。但有时(每 2 天一次)脚本会失败并退出。脚本的错误日志显示:
Error: getaddrinfo ENOTFOUND stream_url stream_url:8000
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
Emitted 'error' event at:
at Socket.socketErrorListener (_http_client.js:392:9)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
events.js:174
throw er; // Unhandled 'error’ event
其中“stream_url”是真正的ogg流URL。
我还注意到,如果改变流网址在其他一些可以正常工作的 ogg 流上(不是我的,只是通过 Google 找到的),不再出现错误。IceCast 错误日志对此只字未提,只有 INFO 和一些有关网络(图标)的 WARN。
看起来 IceCast 以某种方式崩溃或禁用了域或端口/套接字,或者可能不是其本身,但却导致了这种影响。
可能存在什么问题?
PS操作系统是CentOS。
答案1
查看 NodeJS 文档dns.lookup()了解出了什么问题。
这有没有什么与 Icecast 相关的操作。NodeJS 无法将 FQDN/主机名(在这个意义上stream_url
是错误的)解析为 IP 地址。这可能有很多原因,例如:
- NodeJS 资源耗尽或停滞
- 系统资源不足
- 所查询的解析器 DNS 没有正确应答
- 解析器的互联网连接已中断
- 该 FQDN 的权威 DNS 服务器没有应答
- …
您的实际用例最好通过其他方式解决,例如查询 Icecast JSON API 端点、解析其 playlist.log 或从源客户端获取数据。