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

liangxh2008的博客

 
 
 

日志

 
 

基于ruby-protobuf的rpc示例  

2010-04-14 23:27:16|  分类: 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"  
  评论这张
 
阅读(399)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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