我在Erlang开发中的一个地方,我需要创建一个C节点(请参阅针对C-Node文档的link)。基本的实现很简单,但是,文档中有一个巨大的漏洞。Threaded Erlang C-Node(cnode)互操作性howto?
该代码实现了单线程客户端和服务器。目前忽略客户端实现服务器的'c'代码是单线程的,一次只能连接到一个erlang客户端。
- 启动EPMD( 'EPMD -daemons')
- 启动所述服务器应用( 'cserver 1234')
- 启动Erlang的客户端应用程序( 'ERL -sname E1 -setcookie secretcookie')[在一个在#从二郎壳现在3
服务器正在运行,并且电流的erlang壳具有:不同的窗口从#2]
- 打开一个新窗口。
- 启动erlang客户端('erl -sname e2 -setcookie secretcookie')。
- 执行新的服务器命令('complex3:foo(3)。')。
请注意,系统似乎挂起...当它应该执行命令。它挂起的原因是因为其他erlang节点已连接,并且没有其他线程正在侦听连接。
注意:似乎有连接处理中的错误。我在接收模块中添加了一个超时,并且发现了一些错误的行为,但是我没有完全理解。另外,如果我强制第一个erlang节点在指定的步骤执行后终止,我能够使cserver在没有警告或错误的情况下崩溃。
所以,这个问题......什么是实现线程化C-Node的最佳方式?什么是合理的连接数量?
为了确定崩溃的性质,我使用gdb运行代码,显示服务器正在接收SIGPIPE。我用'信号(SIGPIPE,SIG_IGN)'来对抗这个信号。 – Richard 2010-03-29 11:58:53
如果这是您的问题的答案,请将其写入答案并“接受”该答案,以便将此问题列入“已答复”列表中。 – ndim 2010-04-21 13:51:12