ruby rack rpc服务器/客户端示例

时间:2012-03-21 11:44:39

标签: ruby xml-rpc rack

我有下一个代码

require 'rack/rpc'

class Server < Rack::RPC::Server
  def hello_world
    "Hello, world!"
  end


  rpc 'hello_world' => :hello_world

end


server = Server.new
use Rack::RPC::Endpoint, server
run server

脚本名称是server.ru

我正在使用命令

启动服务器
thin start -R server.ru 


>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop

也是客户端示例

require "xmlrpc/client"

# Make an object to represent the XML-RPC server.
server = XMLRPC::Client.new( "0.0.0.0", "/rpc", 3000)
# Call the remote server and get our result
result = server.call("hello_word")


puts result

下一个命令给我异常

ruby client.rb 
client.rb:414:in `call': Method hello_word missing or wrong number of parameters! (XMLRPC::FaultException)
    from client.rb:7:in `<main>'

为什么找不到hello_word?谢谢。

1 个答案:

答案 0 :(得分:1)

这只是一个错字。您正在呼叫hello_word而不是hello_world尝试:

result = server.call("hello_world")

这应该可以解决问题。我不认为您可以使用Rackup文件中的run server启动服务器。当然,在config.ru中需要run语句,但运行服务器类的实例是没有意义的,因为它甚至没有call方法。在实践中,您将在那里安装另一个应用程序,例如:

require 'builder'
require 'rack/rpc'

class Server < Rack::RPC::Server
  def hello_world
    "Hello, world from RPC Server!"
  end 

  rpc 'hello_world' => :hello_world
end

class MyApplication
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello world from MyApplication!"]]
  end 
end

use Rack::RPC::Endpoint, Server.new
run MyApplication.new

我还需要包含builder gem以使其生效。