接続を受信し、いくつかの処理を行い、標準ポートで応答を返す単純なプログラムがあります。これは同期的に行われるため、1 つの要求に時間がかかりすぎると、同時要求は処理されません。
Deerrable は、ブロッキング リクエストが発生していても、複数のリクエストを同時に処理できるようにするための方法ですか?
ありがとう、
接続を受信し、いくつかの処理を行い、標準ポートで応答を返す単純なプログラムがあります。これは同期的に行われるため、1 つの要求に時間がかかりすぎると、同時要求は処理されません。
Deerrable は、ブロッキング リクエストが発生していても、複数のリクエストを同時に処理できるようにするための方法ですか?
ありがとう、
最も簡単な方法は、新しいスレッドをフォークしてバックグラウンドタスクを処理し、EventMachineに関連する処理を行う前にメインスレッドに戻すことです。defer
次の方法でこれを行うことができます。
def do_something
EventMachine.defer do
do_long_process
end
end
next_tick
ブロックが接触するアプリケーションの部分はスレッドセーフである必要があり、すべてのEventMachine操作が適切なスレッドで行われるようにするなどの方法でメインスレッドに戻る必要があることに注意してください。
これは、リクエストに時間がかかる理由によって異なります。DB クエリや別のサーバーへの何らかの種類のリクエスト (HTTP、TCP、SMTP など) のような IO バウンドの場合は、EventMachine が適しています。
そうでない場合は、リクエストに時間がかかりすぎる理由を説明できますか?