0

私自身の学習/利益のために、Erlang で分散チャット アプリケーションを作成しています。永続的な TCP 接続を維持するクライアントとサーバーがあります。クライアントは、gen_tcp:connect/3 を使用して接続を開始します。サーバーは実際には複数のノードに分散されています。

gen_tcp のドキュメントには次のように書かれています。

send/2 を使用して、返されたソケット Socket にパケットを送信できます。ピアから送信されたパケットは、メッセージとして配信されます。

{tcp、ソケット、データ}

このため、私のクライアントは、サーバーが通常の Erlang メッセージとして送信するデータを受信できます。これは私のアプリケーションにとって望ましいものです。

問題は、サーバー上の接続を同じように動作させる方法が見当たらないことです。サーバーが送信されたデータを Erlang メッセージとして受信できるようになれば幸いです。このようにして、クライアントがメッセージを送信するのを待っている間に、サーバーはデータを送信できます (つまり、チャット ルームの別の人がメッセージを送信した場合)。

この動作を実装する方法はありますか?

編集: 私は prim_inet:async_accept/2 を認識していますが、可能であれば文書化されたアプローチを希望します。

4

1 に答える 1

2

オプション {active, once|true} を指定したinet:setoptsを見てください。についての良い記事

于 2013-11-29T05:59:48.817 に答える