在氮,Erlang web框架中,我有以下問題。我有一個過程,負責發送和接收消息到另一個充當集線器的進程。這個過程作爲彗星進程來接收消息並更新頁面。如何跟蹤每個瀏覽器窗口的進程並在每個氮氣事件中訪問它?
問題是,當用戶處理一個按鈕,我得到一個事件的調用。我如何在某個活動中獲得該Pid的扣留。
發起通信,並設置在接收部看起來像這樣,第一I具有通過調用WF啓動客戶端處理的事件的代碼:彗星:
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是沒有定義的,我看不出如何得到阿霍德它。有任何想法嗎?
在氮郵件列表相關的威脅:http://groups.google.com/group/nitrogenweb/browse_thread/thread/c6d9927467e2a51a
我理解它提供了一些會話管理,我還沒有使用它。但我需要根據每個窗口而不是每個瀏覽器來跟蹤它。同一個會話應該能夠跟蹤各種窗口中的各種客戶端連接。我雖然關於生成一個大的隨機數,並將它用作會話頂部的鍵,並將該鍵放在HTML中並對其進行跟蹤。不知道這是否是一個好的解決方案。 – Pablo 2010-01-03 20:49:10
在這種情況下,我不能想到其他任何東西,只是按照您的建議生成唯一的鍵。但是,你不需要會話ID了;這些鍵應該是足夠的。 – Zed 2010-01-03 22:10:45