Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何从Rails应用程序thorugh Apache Thrift异步访问Java后端服务?_Ruby_Ruby On Rails 3_Web Applications_Asynchronous_Thrift - Fatal编程技术网

Ruby 如何从Rails应用程序thorugh Apache Thrift异步访问Java后端服务?

Ruby 如何从Rails应用程序thorugh Apache Thrift异步访问Java后端服务?,ruby,ruby-on-rails-3,web-applications,asynchronous,thrift,Ruby,Ruby On Rails 3,Web Applications,Asynchronous,Thrift,因此,我有一个相当繁重的后端服务,它是用Java编写的,通过Apache Thrift连接到Rails应用程序。我正在使用TCP连接访问远程计算机上运行的后端服务 对于每个传入请求,我的Rails控制器执行以下操作: transport = Thrift::BufferedTransport.new(Thrift::Socket.new(SERVER_ADDRESS, SERVER_PORT)) protocol = Thrift::BinaryProtocol.new(transport) c

因此,我有一个相当繁重的后端服务,它是用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.7GB RAM的小型ec2实例上


我对Ruby/Rails(来自Java/C++背景)相当陌生,因此仍在努力掌握Ruby领域的工作原理。

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

service MyService
{
   async void processUserRequest(1: Query query);
}

我知道我可以使用Thrift服务的异步版本,但是如何捕获返回值呢?回拨?事件?