我在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