牛仔连接过程以enomem终止

时间:2014-10-21 02:52:01

标签: erlang cowboy ranch

我遇到了牛仔错误

  

Ranch监听器api_resource已经使用cowboy_protocol:start_link / 4< 0.1822.0>启动了连接过程。退出原因: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.

0 个答案:

没有答案