Erlang收到***警告***

时间:2017-08-19 03:09:32

标签: erlang otp

我有一个循环并接收命令的进程。

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}}

无论如何要处理这个问题?它会导致任何问题吗?

感谢您的回答!

1 个答案:

答案 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系统消息。