我有一个循环并接收命令的进程。
receive
increase ->
...
decrease ->
...
after 5000 ->
...
end
但是,当我用数以千计的信息轰炸它时,它就会崩溃并收到这些警告。
警告讯息:
***WARNING*** Unexp msg {<0.106.0>,rec_acked}, info {running,
[{'_UserConnections',20}],
{ieval,3994,34,log,
clientLogging,
[20],
false}}
无论如何要处理这个问题?它会导致任何问题吗?
感谢您的回答!
答案 0 :(得分:3)
此代码仅用于示例和实践,但不能在生产环境中运行 您应始终从流程邮箱接收所有邮件,并在获取后选择所需内容。
handle_message() ->
receive
Msg ->
handle_message(Msg)
after 5000 ->
handle_timeout()
end.
handle_message(increase) ->
...;
handle_message(decrease) ->
...;
handle_message(_) ->
%% Back to receiving loop
handle_message().
您应该防止填写流程邮箱
在生产就绪的应用程序中,通常没有人使用receive
语句,通常他们使用一些标准代码,这些代码处理接收,超时,回复,休眠等。我们将这些代码称为行为, OTP标准行为的示例之一是gen_server behavior
因为如果您需要非常有效的代码来执行某些特殊任务,OTP行为是出于一般目的,您必须编写一个名为Special process的东西,它应该处理您自己的消息和Erlang系统消息。