現在、Erlang 開発の段階で C ノードを作成する必要があります ( C ノードのドキュメントへのリンクを参照してください)。基本的な実装は単純ですが、ドキュメントには大きな穴があります。
このコードは、シングル スレッドのクライアントとサーバーを実装します。しばらくクライアントを無視します... サーバーを実装する 'c' コードはシングル スレッドであり、一度に 1 つの erlang クライアントにしか接続できません。
- EPMD を起動します ('epmd -daemons')
- サーバー アプリケーション ('cserver 1234') を起動します。
- erlang クライアント アプリケーションを起動します ('erl -sname e1 -setcookie secretcookie') [#2 とは別のウィンドウで]
- #3 の erlang シェルからサーバー コマンド ('complex3:foo(3).') を実行します。
サーバーが実行され、現在の erlang シェルがサーバーに接続されたので、別のウィンドウから再試行してください。
- 新しいウィンドウを開きます。
- erlang クライアントを起動します ('erl -sname e2 -setcookie secretcookie')。
- 新しいサーバー コマンド ('complex3:foo(3)') を実行します。
システムがハングしているように見えることに注意してください...コマンドを実行する必要があるときに。ハングする理由は、他の erlang ノードが接続されており、接続をリッスンしているスレッドが他にないためです。
注:接続処理にバグがあるようです。受信ブロックにタイムアウトを追加し、いくつかの異常な動作をキャッチしましたが、すべてを取得することはできませんでした。また、指示された手順を実行した後に最初の erlang ノードを強制的に終了させた場合、警告やエラーなしで cserver をクラッシュさせることができました。
そこで質問です... スレッド化された C-Node を実装する最良の方法は何ですか? 妥当な接続数はいくつですか?