そのため、Apache Thrift を介して Rails アプリに接続されている Java で書かれたかなり重いバックエンド サービスがあります。TCP 接続を使用して、リモート マシンで実行されているバック エンド サービスにアクセスしています。
着信リクエストごとに、Rails コントローラーは次のことを行います。
transport = Thrift::BufferedTransport.new(Thrift::Socket.new(SERVER_ADDRESS, SERVER_PORT))
protocol = Thrift::BinaryProtocol.new(transport)
client = MyService::Client.new(protocol)
transport.open()
@result = client.processUserRequest(query)
transport.close()
上記のサービス コールは、バックエンド サーバーがリクエストを処理している間、明らかにブロックされます。これを非同期にする方法はありますか? そのため、バックエンド サーバーによって要求が処理されている間、Web フロント エンドは着信 HTTP 要求を引き続き受け入れることができます。これを達成するためのオプションは何ですか?
Apache で Phusion Passenger を使用しています。せいぜい数十から数百の同時接続が見られると予想しています。私の Web サーバーは、1.7 GB RAM の小さな ec2 インスタンス上にあります。
私は Ruby/Rails (Java/C++ のバックグラウンドから来ている) にまったく慣れていないので、Ruby の世界で物事がどのように機能するかをまだ理解しようとしています。