2013-08-25 67 views
0

我已經在Erlang中編寫了一個簡單的聊天服務器(沒有任何套接字或端口,只是在多個shell之間的消息之間),但是當我嘗試模擬它時,我遇到了一些問題。 在我的實現中,幾乎每個客戶端函數(如pm,say_to_all)都需要Chat_server-s進程ID。 如果我在一個shell中打開chat_server和client,我可以很容易地綁定chat_server的進程ID並在必要時訪問它,但是當我想爲客戶端打開另一個shell時會出現問題。 看圖片 - >http://s018.radikal.ru/i501/1308/ee/a194aa8486ae.png 如何從第二個shell(chat_client)從第一個shell(chat_server)訪問進程?Erlang-Pid控件

回答

1

您可以使用某個名稱在全球註冊您的服務器(http://erlang.org/doc/man/global.html#register_name-2)。這樣,您可以從聊天系統中的任何shell訪問服務器。

不要忘記,您需要首先使用net_adm:ping連接shell,讓shell知道全局註冊的名稱。

我真的可以建議尋找gen_server(http://www.erlang.org/doc/man/gen_server.html),因爲它可以真正幫助組織客戶端服務器結構。

編輯: 對不起,也許您還想要解釋您的問題。 這是因爲每個erlang-shell都有自己的變量等。這意味着第二個shell不知道其他shell的變量。

+0

非常感謝。 erlang全局模塊非常幫助我,現在我的代碼工作:) –

+0

很高興我可以幫忙。 –