1

“Erlang and OTP in Action”一书的第 3 章中,有一个tr_server例子。我对此有一些疑问:

  1. 为什么我们不能tr_server:get_count().在 telnet 中调用?该书指出该handle_info/2函数将同步调用gen_server:call/2. 任何人都可以提供有关问题的更多详细信息吗?

  2. tr_server而且,gen_server,erl console和之间的关系是什么telnet

4

1 回答 1

4

第一个问题的答案在本书第 117 页,其中有一个单独的框架,标题为“服务器不应调用自身”。问题是,由于代码gen_servertr_server:get_count(). 该函数的实现通过向 发送消息gen_server然后阻塞以等待回复来工作,但是消息循环在handle_info/2处理您的调用请求时已经被阻塞tr_server:get_count()gen_server进程在该点再次调用自身的任何尝试都会导致死锁。

至于第二个问题:

  • tr_server是与 . 一起使用的回调模块gen_server。标准gen_server模块实现了一个消息接收循环,处理一些消息本身,特别是系统消息,并调用tr_server模块回调来处理所有其他消息,即应用程序消息。

  • Erlang shell 实现了一个读取-评估-打印循环(REPL)。它以 Erlang 函数调用和它自己的 shell 命令的形式接受来自用户的输入,执行它们,并将结果呈现给用户。与tr_servershell 类似,但shell 功能更强大、更全面。

  • Telnet是一种古老但仍然有效的交互式访问远程 Internet 主机的方法。阅读链接了解更多详情。

于 2015-08-11T12:45:55.590 回答