問題タブ [gen-tcp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sockets - erlang での gen_tcp:recv の中断
クライアント側でパッシブ ソケットのプールを作成し、他のプロセスに借用することでそれらのプールを管理する gen_server プロセスがあります。他のプロセスは、ソケットを借用し、ソケットを使用してサーバーに要求を送信し、gen_tcp:recv を介して応答を取得し、ソケットを gen_server ソケット プール プロセスに解放できます。
ソケット プール プロセスは、ソケットを借用するすべてのプロセスを監視します。借用したプロセスのいずれかがダウンしている場合、そこからダウン シグナルを受け取ります。
handle_info({'DOWN', Ref, process, _Pid, _Reason}, State) ->
この場合、借用したソケットを空にし、プールに戻して再利用します。問題は、 を使用してソケットをドレインしようとすると、操作が進行中であることを意味するgen_tcp:recv(Socket, 0, 0)
inetealready
エラー メッセージが表示されることです。recv
したがって、問題は、前recv
の を中断し、ソケットを正常にドレインし、他のプロセスに再利用する方法です。
ありがとう。
elixir - Elixir gen_tcp.recv が、実際の telnet クライアントが動作しているときに単体テストでデータを受信しない
単体テストを作成しようとしている稼働中の telnet サーバーがあります。サーバーは telnet クライアントで正常に動作し、接続が確立されるとすぐにプロンプトを送信することが期待されます。同じソケットで送信すると正常に動作します。しかし、単体テストの TCP クライアントはデータの受信を拒否し、タイムアウトします。私は Elixir を初めて使用するので、基本的なものが欠けている可能性があります。
次の出力が得られます
Elixir初心者が間違っていることを誰かが明らかにしてくれると助かります
erlang - erlang で gen_server として実装された tcp_listener を停止する方法
tcp_listener を gen_server() として実装しました。start_link(Port) という関数があり、そのポートで tcp_listener を作成します。ここで、stop() を使用して tcp_listener にリッスンを停止するように指示する方法を理解するのに苦労しています。このような関数を stop で呼び出してみました。
terminate/2 関数で、リッスンしているソケットを閉じようとしましたが失敗しました。
リッスンしているソケットを閉じると、生成した受け入れられた接続はどうなりますか。
ありがとうございました!
sockets - gen_tcp 使用時のソケットの受け入れ率
gen_tcp
ビヘイビアを使用しているときに、興味深い問題が見つかりました。サーバーとクライアントがあります。サーバーは接続を受け入れ、クライアントは多くのプロセスを作成し、それらすべてがリッスン サーバーに接続しようとします。
すべてが同時にソケットに接続しようとする多くのプロセスを生成するクライアントを起動しようとすると、多くのプロセスが失敗します。ただし、置くtimer:sleep(x)
と、すべてのソケットが受け入れられます。
gen_tcp:accept()
これは、接続要求を受け入れることができる制限があることを意味しますか?
サーバーとクライアントのコードは次のとおりです。
クライアント:
sockets - gen_tcp:recv/2 がエラー、einval を返す
N 個のプロセスを作成し、すべて次のようにサーバーに接続するクライアントがあります。
多くのクライアント接続を作成しています。しばらくして、サーバーからデータが送信される可能性があるため、gen_tcp:recv/2 を使用してそれを待っていますが、{error, einval} が発生します。
また、ソケットが受け入れられるとすぐに閉じられることを観察しているため、ソケットの使用方法に問題はありますか。
理由についての入力はありますか?
ありがとう