注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

liangxh2008的博客

 
 
 

日志

 
 

基于ruby-protobuf的rpc示例  

2010-04-12 16:51:38|  分类: AppMarket |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://hideto.javaeye.com/blog/444515

1, 安装ruby-protobuf

Ruby代码
  1. gem install ruby_protobuf  
gem install ruby_protobuf


2, 定义rpc service的rpc.proto文件
Ruby代码
  1. package demo;  
  2.   
  3. message SearchRequest {  
  4.   required string keyword = 1;  
  5. }  
  6.   
  7. message SearchResponse {  
  8.   required string result = 1;  
  9. }  
  10.   
  11. service RpcService {  
  12.   rpc Search (SearchRequest) returns (SearchResponse);  
  13. }  
package demo;

message SearchRequest {
  required string keyword = 1;
}

message SearchResponse {
  required string result = 1;
}

service RpcService {
  rpc Search (SearchRequest) returns (SearchResponse);
}


3, 编译
Ruby代码
  1. rprotoc rpc.proto  
rprotoc rpc.proto


4, 完成service和client代码
rpc_service.rb
Ruby代码
  1. require 'protobuf/rpc/server'  
  2. require 'protobuf/rpc/handler'  
  3. require 'rpc.pb'  
  4.   
  5. class Demo::SearchHandler < Protobuf::Rpc::Handler  
  6.   request Demo::SearchRequest  
  7.   response Demo::SearchResponse  
  8.     
  9.   def self.process_request(request, response)  
  10.     if request.keyword == 'google'  
  11.       response.result = 'www.google.com'  
  12.     elsif request.keyword == 'freewheel'  
  13.       response.result = 'www.freewheel.tv'  
  14.     else  
  15.       response.result = ''  
  16.     end  
  17.   end  
  18. end  
  19.   
  20. class Demo::RpcService < Protobuf::Rpc::Server  
  21.   def setup_handlers  
  22.     @handlers = {  
  23.       :search => Demo::SearchHandler,  
  24.     }   
  25.   end  
  26. end  
require 'protobuf/rpc/server'
require 'protobuf/rpc/handler'
require 'rpc.pb'

class Demo::SearchHandler < Protobuf::Rpc::Handler
  request Demo::SearchRequest
  response Demo::SearchResponse
  
  def self.process_request(request, response)
    if request.keyword == 'google'
      response.result = 'www.google.com'
    elsif request.keyword == 'freewheel'
      response.result = 'www.freewheel.tv'
    else
      response.result = ''
    end
  end
end

class Demo::RpcService < Protobuf::Rpc::Server
  def setup_handlers
    @handlers = {
      :search => Demo::SearchHandler,
    } 
  end
end

client_search.rb
Ruby代码
  1. #!/usr/bin/env ruby  
  2. require 'protobuf/rpc/client'  
  3. require 'rpc.pb'  
  4.   
  5. # build request  
  6. request1 = Demo::SearchRequest.new  
  7. request1.keyword = 'google'  
  8. request2 = Demo::SearchRequest.new  
  9. request2.keyword = 'freewheel'  
  10.   
  11. # create blunk response  
  12. response1 = Demo::SearchResponse.new  
  13. response2 = Demo::SearchResponse.new  
  14.   
  15. # execute rpc  
  16. Protobuf::Rpc::Client.new('localhost', 9999).call :search, request1, response1  
  17. Protobuf::Rpc::Client.new('localhost', 9999).call :search, request2, response2  
  18.   
  19. p response1.result  
  20. p response2.result  
#!/usr/bin/env ruby
require 'protobuf/rpc/client'
require 'rpc.pb'

# build request
request1 = Demo::SearchRequest.new
request1.keyword = 'google'
request2 = Demo::SearchRequest.new
request2.keyword = 'freewheel'

# create blunk response
response1 = Demo::SearchResponse.new
response2 = Demo::SearchResponse.new

# execute rpc
Protobuf::Rpc::Client.new('localhost', 9999).call :search, request1, response1
Protobuf::Rpc::Client.new('localhost', 9999).call :search, request2, response2

p response1.result
p response2.result


5, 运行
启动Service
Java代码
  1. ruby start_rpc_service  
  2. // :port参数名改为:Port  
ruby start_rpc_service
// :port参数名改为:Port

调用Client
Java代码
  1. ruby client_search.rb  
  2. // result  
  3. "www.google.com"  
  4. "www.freewheel.tv" 
  评论这张
 
阅读(687)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017