1

所以我有一个用 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 领域的工作原理。

4

1 回答 1

0

是的。只需async在 Thrift 定义中使用修饰符即可。方法返回类型必须为 void。请注意,您不能保证消息已成功处理,只是已将其发送到服务器。

service MyService
{
   async void processUserRequest(1: Query query);
}
于 2012-10-15T19:31:35.930 回答