私は現在erlangでソフトウェアを書いていますが、これは現在gen_serverの動作に基づいています。このgen_serverは、sslを使用してオンラインで別のサービスに接続し、関数に引数として渡された値を送信する関数(update / 1と呼びます)をエクスポートする必要があります。
現在、update/1は次のようになっています。
update(Value) ->
gen_server:call(?SERVER, {update, Value}).
したがって、呼び出されると、次のように処理される?SERVERへの呼び出しがあります。
handle_call({update, Value}, _From, State) ->
{ok, Socket} = ssl:connect("remoteserver.com", 5555, [], 3000).
Reply = ssl:send(Socket, Value).
{ok, Reply, State}.
パケットがリモートサーバーに送信されると、ピアは接続を切断する必要があります。
これはシェルでのテストでは正常に機能しますが、mymod:update(Value)を1000回呼び出す必要があり、ssl:connect / 4がうまく機能しない(つまり、タイムアウトに達している)場合はどうなりますか?
この時点で、私のgen_serverには非常に大量の値があり、それらは1つずつしか処理できないため、update/1を使用して値が更新されてから1000*3000ミリ秒後に1000番目の更新が実行されます。
呼び出しの代わりにキャストを使用すると、同じ問題が発生します。どうすればこの問題を解決できますか?gen_server呼び出しではなく、通常の関数を使用する必要がありますか?