2013-08-25 6 views
0

Erlang에 간단한 채팅 서버를 썼는데 (소켓이나 포트없이, 여러 쉘 사이에 메시지를 보낼 때), 시뮬레이션을 시도 할 때 몇 가지 문제가 있습니다. 내 구현의 거의 모든 클라이언트 기능 (예 : pm, say_to_all)에는 Chat_server-s 프로세스 ID가 필요합니다. 하나의 셸에서 chat_server와 client를 열면 chat_server의 프로세스 ID를 쉽게 바인딩 할 수 있으며 필요한 경우 액세스 할 수 있지만 클라이언트 용 다른 셸을 열려고 할 때 문제가 발생합니다. 그림을 보면 ->http://s018.radikal.ru/i501/1308/ee/a194aa8486ae.png 두 번째 셸 (chat_client)의 1-st shell (chat_server)에서 프로세스에 액세스하는 방법은 무엇입니까?Erlang-Pid 컨트롤

답변

1

서버를 특정 이름 (http://erlang.org/doc/man/global.html#register_name-2)으로 전세계에 등록 할 수 있습니다. 그렇게하면 chatsystem 내의 모든 쉘에서 서버에 액세스 할 수 있습니다.

쉘에 net_adm : ping을 먼저 연결해야만 쉘에 전역 적으로 등록 된 이름을 알릴 수 있습니다.

그리고 정말 클라이언트 - 서버 구조를 구성하려고 할 때 도움이 될 수 있으므로 gen_server (http://www.erlang.org/doc/man/gen_server.html)을 살펴 보는 것이 좋습니다.

편집 : 죄송합니다. 문제에 대한 설명을 원할 수도 있습니다. 이것은 모든 erlang-shell이 ​​자신의 변수 등으로 자신의 환경을 가지고 있기 때문입니다. 즉, 두 번째 쉘은 다른 쉘의 변수를 알지 못합니다.

+0

감사합니다. erlang 전역 모듈이 매우 도움이되었습니다. 이제는 코드가 작동합니다. –

+0

다행입니다. 도움이 될 수 있습니다. –

관련 문제