所以我有一个用 Java 编写的相当繁重的后端服务,它通过 Apache Thrift 连接到 Rails 应用程序。我正在使用 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 请求。我有什么选择来实现这一目标?
我正在将 Phusion 乘客与 Apache 一起使用。我希望最多看到几十到几百个并发连接。我的 Web 服务器位于具有 1.7 GB RAM 的小型 ec2 实例上。
我对 Ruby/Rails 很陌生(来自 Java/C++ 背景),所以仍然试图掌握 Ruby 领域的工作原理。