Erlang Web フレームワークである Nitrogen には、次の問題があります。ハブとして機能する別のプロセスへのメッセージの送受信を処理するプロセスがあります。このプロセスはコメット プロセスとして機能し、メッセージを受信してページを更新します。
問題は、ユーザーがボタンを処理すると、イベントが呼び出されることです。イベントでその Pid を入手するにはどうすればよいですか。
通信を開始して受信側をセットアップするコードは次のようになります。最初に、wf:comet を呼び出してクライアント プロセスを開始するイベントがあります。
event(start_chat) ->
Client = wf:comet(fun() -> chat_client() end);
クライアント プロセスのコードは次のとおりです。これは、最初にルームを取得して参加し、その後、ルームとの間でメッセージを送受信するループに入ります。
chat_client() ->
Room = room_provider:get_room(),
room:join(Room),
chat_client(Room).
chat_client(Room) ->
receive
{send_message, Message} ->
room:send_message(Room, Message);
{message, From, Message} ->
wf:insert_bottom(messages, [#p{}, #span { text=Message }]),
wf:comet_flush()
end,
chat_client(Room).
さて、ここで問題です。send_message という別のイベントがあります。
event(send_message) ->
Message = wf:q(message),
ClientPid ! {send_message, Message}.
ClientPid がそこで定義されていないことを除いて、それを取得する方法がわかりません。何か案は?
Nitrogen メーリング リストの関連する脅威: http://groups.google.com/group/nitrogenweb/browse_thread/thread/c6d9927467e2a51a