我遇到了牛仔错误
牧场侦听器 api_resource 在 <0.1822.0> 退出时以 cowboy_protocol:start_link/4 开始连接过程,原因是:enomem#012
在请求处理程序中,我通过 erlang 端口(c 语言)与另一个供应商的 tts 平台进行交互。对端口的第一个 tts 命令成功,我可以得到 1M 字节的数据,对端口的第二个 tts 命令成功发送到端口,但随后牛仔进程立即终止并出现上述错误消息。
我试图提高 erlang vm 的堆栈大小、堆大小、二进制虚拟堆大小和 os 的堆栈大小,没有帮助。
任何建议表示赞赏,谢谢。
代码:
tts(Port, Params, Text) ->
case call_port(Port, {'set_tts_params', Params}) of
{'error', _}=Error -> Error;
_ -> slice_tts(Port, slice_text(Text), <<>>)
end.
slice_tts(_Port, [], Acc) ->
lager:debug("tts over"),
{'ok', <<"RIFF", (byte_size(Acc)+36):32, "WAVE", "fmt ", 16:32,
1:16, 1:16, 16000:32, 32000:32, 2:16, 16:16,
"data", (byte_size(Acc)):32, Acc/binary>>};
slice_tts(Port, [Text|Others], Acc) ->
lager:debug("ttsing ~p bytes", [byte_size(Text)]),
case call_port(Port, {'tts', Text}) of
{'error', _}=Error -> Error;
{'ok', Data} -> slice_tts(Port, Others, <<Acc/binary, Data/binary>>)
end.