アプリケーションに対して多数の同時SOAPリクエストを行うerlangプロジェクトがあります。現在、利用可能なノードの数によって制限されていますが、各ノードが一度に複数のメッセージを送信できるように調整したいと思います。
私はその問題を理解しましたが、SOAPリクエストを実行しているプロセスから応答を返す方法がわかりません。
これは、複数のスレッドを実行するために使用しようとしている私の関数です。
batch(Url, Message, BatchSize) ->
inets:start(),
Threads = for(1, BatchSize, fun() -> spawn(fun() -> attack_thread() end) end),
lists:map(fun(Pid) -> Pid ! {Url, Message, self()} end, Threads).
この関数は、ストレステスターを開始した人によって呼び出され、ネットワーク内のすべてのノードで呼び出されます。要求された数のSOAP要求がすべて送信され、タイミングが取られるまで、継続的に呼び出されます。
これは、バッチメソッドによってメッセージが送信されるattack_threadです。
attack_thread() ->
receive
{Url, Message, FromPID} ->
{TimeTaken, {ok, {{_, 200, _}, _, _}}} = timer:tc(httpc, request, [post, {Url, [{"connection", "close"}, {"charset", "utf-8"}], "text/xml", Message}, [], []]),
TimeTaken/1000/1000.
end
ご覧のとおり、SOAPリクエストにかかった秒数を返したいと思います。ただし、erlangのメッセージパッシング(Pid ! Message
)は有用なものを返しません。
どうすれば結果を取り戻すことができますか?