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