在我的 Erlang 开发中,我需要创建一个 C-Node(请参阅C-Node 文档的链接)。基本实现很简单,但是文档中有一个巨大的漏洞。
该代码实现了单线程客户端和服务器。暂时忽略客户端......实现服务器的'c'代码是单线程的,一次只能连接到一个erlang客户端。
- 启动 EPMD ('epmd -daemons')
- 启动服务器应用程序('cserver 1234')
- 启动 erlang 客户端应用程序 ('erl -sname e1 -setcookie secretcookie') [在与 #2 不同的窗口中]
- 从 #3 中的 erlang shell 执行服务器命令 ('complex3:foo(3).')
现在服务器正在运行并且当前的 erlang shell 已连接到服务器,从另一个窗口再次尝试。
- 打开一个新窗口。
- 启动一个 erlang 客户端('erl -sname e2 -setcookie secretcookie')。
- 执行一个新的服务器命令('complex3:foo(3).')。
请注意,系统似乎挂起......它应该已经执行了命令。它挂起的原因是因为另一个 erlang 节点已连接,并且没有其他线程在侦听连接。
注意:连接处理中似乎存在错误。我在接收块中添加了一个超时,我发现了一些错误的行为,但我没有得到它们。此外,如果我在执行指示的步骤后强制第一个 erlang 节点终止,我能够让 cserver 在没有警告或错误的情况下崩溃。
所以问题是......实现线程化 C 节点的最佳方式是什么?什么是合理的连接数?