在“Erlang and OTP in Action”一书的第 3 章中,有一个tr_server
例子。我对此有一些疑问:
为什么我们不能
tr_server:get_count().
在 telnet 中调用?该书指出该handle_info/2
函数将同步调用gen_server:call/2
. 任何人都可以提供有关问题的更多详细信息吗?tr_server
而且,gen_server
,erl console
和之间的关系是什么telnet
?
在“Erlang and OTP in Action”一书的第 3 章中,有一个tr_server
例子。我对此有一些疑问:
为什么我们不能tr_server:get_count().
在 telnet 中调用?该书指出该handle_info/2
函数将同步调用gen_server:call/2
. 任何人都可以提供有关问题的更多详细信息吗?
tr_server
而且,gen_server
,erl console
和之间的关系是什么telnet
?
第一个问题的答案在本书第 117 页,其中有一个单独的框架,标题为“服务器不应调用自身”。问题是,由于代码gen_server
在tr_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_server
shell 类似,但shell 功能更强大、更全面。
Telnet是一种古老但仍然有效的交互式访问远程 Internet 主机的方法。阅读链接了解更多详情。