0

我在 Erlang 中编写了一个简单的聊天服务器(没有任何套接字或端口,只是在多个 shell 之间发送消息),但是当我尝试模拟它时,我遇到了一些问题。在我的实现中,几乎每个客户端功能(如 pm、say_to_all)都需要 Chat_server-s 进程 ID。如果我在一个 shell 中打开 chat_server 和 client,我可以很容易地绑定 chat_server 的进程 ID 并在必要时访问它,但是当我想为 client 打开另一个 shell 时就会出现问题。看图片-> http://s018.radikal.ru/i501/1308/ee/a194aa8486ae.png 如何从第二个shell(chat_client)访问第一个shell(chat_server)的进程?

4

1 回答 1

1

您可以使用特定名称(http://erlang.org/doc/man/global.html#register_name-2)在全球范围内注册您的服务器。这样,您就可以从聊天系统中的任何 shell 访问服务器。

不要忘记,您需要先将 shell 与 net_adm:ping 连接,以让 shell 知道全局注册名称。

我真的可以推荐查看 gen_server ( http://www.erlang.org/doc/man/gen_server.html ),因为它在尝试组织客户端-服务器结构时真的很有帮助。

编辑:对不起,也许您还想解释您的问题。这是因为每个 erlang-shell 都有自己的环境和自己的变量等。这意味着第二个 shell 不知道其他 shell 的任何变量。

于 2013-08-25T13:26:42.327 回答