bawbaw 2008-9-24 13:17
PHPRPC for Ruby 教學
[url=http://bawbaw-hu.blogspot.com/2008/09/phprpc-for-ruby_22.html]PHPRPC for Ruby 使用教學[/url][size=180%][b]PHPRPC for Ruby[/b][/size]
PHPRPC is a Remote Procedure Calling protocol that works over the Internet for Ruby
PHPRPC 是由 [url=http://www.coolcode.cn/]andot[/url] 所開發的完美高效的遠端呼叫程序。
[b]如何安裝PHPRPC?[/b]
從Gem安裝:
$ gem install phprpc
[b]PHPRPC for Ruby的客戶端程式碼[/b][code]#!ruby
require 'rubygems'
require "phprpc"
rpc_url="http://bawbaw.icittys.com/rpc_server.php"
client = PHPRPC::Client.new(rpc_url)#初始化一個PHPRPC client
puts client.add(1, 2)#呼叫遠端函數add(1,2)將列印出3
puts client.sub(1, 2)#呼叫遠端函數sub(1,2)將列印出-1
puts client.hello('Ma Bingyao')#呼叫遠端函數hello('Ma Bingyao')將列印出hello Ma Bingyao[/code]這樣子就完成啦…簡單吧
再來示範如何加密傳輸[code]#!ruby
require 'rubygems'
require "phprpc"
rpc_url="http://bawbaw.icittys.com/rpc_server.php"
client = PHPRPC::Client.new(rpc_url)#初始化一個PHPRPC client
client.encryptmode = 2#雙向加密
client.keylength = 256#加密長度256
puts client.add(1, 2)#呼叫遠端函數add(1,2)將列印出3
puts client.sub(1, 2)#呼叫遠端函數sub(1,2)將列印出-1
puts client.hello('Ma Bingyao')#呼叫遠端函數hello('Ma Bingyao')將列印出hello Ma Bingyao[/code]沒看過這麼簡單的web service吧…安全又快速
[b]PHPRPC for Ruby的伺服器端程式碼[/b][code]#!ruby
require 'rubygems'
require "phprpc"
def add(a, b)
a + b
end
def sub(a, b)
a - b
end
def hello(s)
"hello: " << s
end
server = PHPRPC::Server.new
server.debug = true
server.add(["add", "sub", "hello"])#將上列的function發佈
server.start[/code]在此推薦Thin和Mongrel這兩種server
如未安裝Thin或Mongrel先安裝(擇一安裝或兩種都安裝)
$ gem install thin
$ gem install mongrel
[b]如何啟動PHPRPC for Ruby Server[/b]
1.使用Thin發佈PHPRPC
$ ruby server.rb thin
如何?很簡單吧,那再看下列的Mongrel Server啟動方式
2.使用Mongrel發佈PHPRPC
$ ruby server.rb mongrel
此時發佈網址為http://localhost:3000/
如果想要改變一些參數,請用
$ ruby server.rb thin --help
$ ruby server.rb mongrel --help
就可以知道如何改變及設定啟動參數
現在大家就動手測試吧…歡迎進入PHPRPC的世界
[[i] 本帖最后由 bawbaw 于 2008-9-24 13:22 编辑 [/i]]
bawbaw 2008-9-24 13:24
PHPRPC for Ruby Server端發佈進階方法
[b]PHPRPC for Ruby的伺服器端程式碼[/b][code]#!ruby
require 'rubygems'
require "phprpc"
def add(a, b)
a + b
end
def sub(a, b)
a - b
end
def hello(s)
"hello: " << s
end
server = PHPRPC::Server.new
server.debug = true
server.add(["add", "sub", "hello"])#將上列的function發佈
server.start[/code]除了提供基本的function發佈外,也可以將class發佈以及別名發佈方式
請看下面範例:
[b]將function別名發佈[/b]
假設要將hello以另一個名稱發佈方法,就使用[code]server.add("hello",nil,"hihi")[/code]這樣子就可以了,我們來試試吧[code]puts client.hihi("bawbaw")#將傳回 hello: bawbaw[/code]將class發佈
先寫一個名為Test的 class[code]class Test
def initialize()
end
def hi(str)
"hi "<<str
end
def time
Time.now
end
def self.showtime
'it is a show time'
end
end[/code]此時要將Test的hi和time,showtime發佈很簡單,看下面示例[code]server.add("time",Test.new)
server.add("hi",Test.new)
server.add("showtime",Test)#不用將Test實例化[/code]此時也可以將Test的hi別名hi2發佈,聰明的你一定知道怎做啦…就是在[code]server.add("hi",Test.new,'hi2')[/code]此時來試驗看看[code]puts client.hi2('bawbaw')#將傳回hi bawbaw[/code]
bawbaw 2008-9-24 13:26
再談如何發佈block以及lambda
[b][size=5]假設有一個lambda是要計算兩個數的總合[/size][/b][code]sum = lambda {|a,b| a+b}[/code]此時要使用PHPRPC for Ruby 發佈只要使用[code]server.add("sum",nil,nil,&sum)[/code]使用&符號在sum前頭,這樣子就可以發佈了
讓我們來測試一下吧[code]puts client.sum(1, 2)#會傳回3[/code][b][size=5]發佈一個暱名方法[/size][/b][code]server.add("good") {|str| str<<" is good"}[/code]直接可以發佈區塊的暱名方法,直覺又不會命名衝突,是個不錯的選擇
讓我們來測試一下吧[code]puts client.good("phprpc")#會傳回phprpc is good[/code]
bayerlin 2008-10-28 16:06
好东西啊,学习中。。。