我刚开始研究Erlang并尝试编写一个彗星应用程序。
这就是事情。
为了降低内存使用率,我在Feed函数上使用proc_lib:hibernate
。但是当套接字断开时,相应的进程仍然存在,而不是退出。
代码如下:
feed({Response, Interval, Socket}) ->
ok = mochiweb_socket:setopts(Socket, [{active, once}]),
receive
{Protocal, _, Bin} ->
ok;
{tcp_closed, _} ->
exit(normal);
{ssl_closed, _} ->
exit(normal);
{router_msg, MsgBody} ->
RespMsg=Response:write_chunk(MsgBody);
Other ->
exit(normal)
after Interval ->
Response:write_chunk("HB")
end,
proc_lib:hibernate(?MODULE, feed, [{Response, Interval, Socket}]).
答案 0 :(得分:1)
在休眠之前,您需要再次将套接字选项设置为{active, once}
。否则,套接字将永远不会向进程发送消息,因此进程不会从休眠状态唤醒。