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