Hprose-ruby与Rails结合使用心得
栏目: Ruby on Rails · 发布时间: 6年前
内容简介:Hprose是一个不错在RPC协议引擎,简洁、高效、易用,支持多种语言。下面是选取Hprose-ruby与Rails项目结合的一个测试,使用了Rails的middleware方式实现。1、首先使用rails new hprose-rails新建一个项目;2、编辑Gemfile文件加入uuidtools、hprose两个gem,需要跨域的同学建议使用rack-cors;
Hprose是一个不错在RPC协议引擎,简洁、高效、易用,支持多种语言。下面是选取Hprose-ruby与Rails项目结合的一个测试,使用了Rails的middleware方式实现。
1、首先使用rails new hprose-rails新建一个项目;
2、编辑Gemfile文件加入uuidtools、hprose两个gem,需要跨域的同学建议使用rack-cors;
点击( 此处 )折叠或打开
- gem 'sqlite3'
- gem 'uuidtools'
- gem 'hprose'
- gem 'rack-cors', :require => 'rack/cors'
3、在app目录下建立一个新的middleware目录,在该目录下建立一个data_port.rb文件;
点击( 此处 )折叠或打开
- #encoding: UTF-8
- def hello(name)
- 'Hello '+name+'!'
- end
- def get_user(id)
- User.find(id).as_json
- end
- def get_users_json
- User.all.as_json
- end
- class DataPort
- def initialize(app)
- @app = app
- end
- def call(env)
- if env['PATH_INFO'] == '/data_port/index'
- hprose_server = HproseHttpService.new
- # hprose_server.crossdomain = true
- hprose_server.add('hello')
- hprose_server.add('get_user')
- hprose_server.add('get_users_json')
- hprose_server.call(env)
- else
- @app.call(env)
- end
- end
- end
4、编辑config/application.rb,加入以下代码,如果跨越使用rack-cors的同学,记得在resource中加入:credentials => true,并同时指定可以跨域的origins域名(不建议使用*通配符,有安全问题,详情请参考rack-cors的说明)
点击( 此处 )折叠或打开
- # rails5
- config . middleware . use DataPort
- # rails3/4
- config . middleware . use 'DataPort'
5、为了测试数据,在db/development.sqlite3中建一个users表,并在app/models/中建一个user.rb
点击( 此处 )折叠或打开
- class User<ActiveRecord::Base
- end
6、客户端我使用的是Delphi(好久没用,最近又有兴趣捡起来了,呵呵)
点击( 此处 )折叠或打开
- unit Unit1 ;
- interface
- uses
- Winapi . Windows , Winapi . Messages , System . SysUtils , System . Variants , System . Classes , Vcl . Graphics ,
- Vcl . Controls , Vcl . Forms , Vcl . Dialogs , Vcl . StdCtrls , HproseCommon ,
- HproseClient , HproseHttpClient , Vcl . Grids ;
- type
- TForm1 = class ( TForm )
- Button1 : TButton ;
- Button2 : TButton ;
- StringGrid1 : TStringGrid ;
- procedure Button1Click ( Sender : TObject ) ;
- procedure FormDeactivate ( Sender : TObject ) ;
- procedure FormCreate ( Sender : TObject ) ;
- procedure Button2Click ( Sender : TObject ) ;
- private
- { Private declarations }
- public
- { Public declarations }
- end ;
- { TUser = class
- Id : Integer ;
- Name : String ;
- end ; }
- var
- Form1 : TForm1 ;
- Client : THproseHttpClient ;
- implementation
- { $ R * . dfm }
- uses System . json ;
- procedure TForm1 . FormCreate ( Sender : TObject ) ;
- begin
- Client : = THproseHttpClient . Create ( nil ) ;
- Client . URI : = 'http://localhost:3000/data_port/index' ;
- //Client.URI := 'http://hprose.com/example/'
- end ;
- procedure TForm1 . FormDeactivate ( Sender : TObject ) ;
- begin
- Client . FreeOnRelease ;
- end ;
- procedure TForm1 . Button1Click ( Sender : TObject ) ;
- begin
- try
- ShowMessage ( VarToStr ( Client . Invoke ( 'hello' , [ '中文' ] ) ) ) ;
- except
- on E : Exception do
- ShowMessage ( E . ClassName+ ': ' + E . Message ) ;
- end ;
- end ;
- procedure TForm1 . Button2Click ( Sender : TObject ) ;
- var
- InvokeResult : Variant ;
- users : IList ;
- user : IMap ;
- I : Integer ;
- J : Integer ;
- begin
- try
- InvokeResult : = Client . Invoke ( 'get_users_json' ) ;
- if VarIsList ( InvokeResult ) then
- begin
- ShowMessage ( 'Invoke result is a IMapList.' ) ;
- users : = VarToList ( InvokeResult ) ;
- StringGrid1 . RowCount : = users . Count+1 ;
- for I : = 0 to users . Count-1 do begin
- user : = VarToMap ( users . Item [ I ] ) ;
- for J : = 0 to user . Keys . Count-1 do begin
- if I = 0 then begin
- StringGrid1 . ColCount : = user . Keys . Count ;
- StringGrid1 . Rows [ I ] [ J ] : = user . Keys [ J ] ;
- end ;
- StringGrid1 . Rows [ I+1 ] [ J ] : = user . Value [ user . Keys [ J ] ] ;
- end ;
- end ;
- end
- else
- ShowMessage ( 'Invoke result is *NOT* a IMapList.' ) ;
- except
- on E : Exception do
- ShowMessage ( E . ClassName+ ': ' + E . Message ) ;
- end ;
- end ;
- end .
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法(英文版•第4版)
[美] Robert Sedgewick、[美] Kevin Wayne / 人民邮电出版社 / 2016-3 / 129.00元
本书作为算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述。第4 版具体给出了每位程序员应知应会的50 个算法,提供了实际代码,而且这些Java 代码实现采用了模块化的编程风格,读者可以方便地加以改造。本书配套网站提供了本书内容的摘要及更多的代码实现、测试数据、练习、教学课件等资源。一起来看看 《算法(英文版•第4版)》 这本书的介绍吧!