我第一次在erlang上工作。每次我尝试运行erlang进程时,它都会卡住,并且不会接受输入。我在eclipse中使用erlide插件来测试erlang代码。Erlang进程卡住了
代码是::
-module(message_router).
%% ====================================================================
%% API functions
%% ====================================================================
%%-compile(export_all).
-export([start/0]).
-export([stop/1]).
-export([send_chat_message/3]).
-export([route_messages/0]).
%% ====================================================================
%% Internal functions
%% ====================================================================
start() ->
spawn(message_router, route_messages, []).
stop(RouterPid) ->
RouterPid ! shutdown.
send_chat_message(RouterPid, Addressee, MessageBody) ->
io:format("send_chat_msg FROM:: ~p TO:: ~p ~n", [RouterPid, Addressee]),
RouterPid ! {send_chat_msg, Addressee, MessageBody}.
route_messages() ->
receive
{send_chat_msg, Addressee, MessageBody} ->
io:format("recv_chat_msg PID:: ~p ~n", [Addressee]),
Addressee ! {recv_chat_msg, MessageBody},
route_messages();
{recv_chat_msg, MessageBody} ->
io:format("Received: ~p~n", [MessageBody]);
shutdown ->
io:format("Shutting down ~n");
Oops ->
io:format("Warning! Received: ~p~n", [Oops]),
route_messages()
end.
当我打试图在外壳
Eshell V5.10.4
([email protected])1> P1 = message_router:start().
<0.1308.0>
([email protected])2> P2 = message_router:start().
<0.1373.0>
([email protected])3> chat_client:send_message(P1, P2, "FIRST Msg").
Sending chat message from chat_client
send_chat_msg FROM:: <0.1308.0> TO:: <0.1373.0>
运行的代码,就像每一件事我在shell中输入在此之后对效果。任何人都可以解释如何在erlang和最佳实践中处理循环。
[编辑]
聊天客户端代码:
-module(chat_client).
-export([send_message/3]).
send_message(RouterPid, Addressee, MessageBody) ->
io:format("Sending chat message from chat_client~n"),
message_router:send_chat_message(RouterPid, Addressee, MessageBody).
尝试调用'message_router:send_message(P1,P2,“FIRST Msg”)。 – aggelgian
您是否查看过gen_servers?对于这样的例子来说,这是一个很好的做法,并且可以让你的工作变得更简单http://www.erlang.org/doc/man/gen_server.html | http://learnyousomeerlang.com/clients-and-servers –
你能否显示chat_client:send_message代码? –