Ruby Programming Language Enables Concise Network Programming

Tags:

Ruby Programming Language Enables Concise Network Programming

1. 웹 서버

require 'socket'
server = TCPServer.new('127.0.0.1', 9090)
while (session = server.accept)
  request = session.gets
  puts request
  session.print "HTTP/1.1 200/OK\rContent-type: text/html\r\n\r\n"
  session.print "<html><head><title>Response from Ruby Web server</title></head>\r\n"
  session.print "<body>request was:"
  session.print request
  session.print "</body></html>"
  session.close
end

2. URL을 파일처럼

require 'open-uri' # allows the use of a file like API for URLs
open("http://127.0.0.1:9090/foo?bar=123") { |file|
  lines = file.read
  puts lines
}

3. WEBrick Webserver

require 'webrick'
include WEBrick

s = HTTPServer.new(:Port => 9090,
                   :DocumentRoot => Dir::pwd + "/htdocs")
trap("INT"){ s.shutdown }
s.start

4. XML-RPC 클라이언트

require 'xmlrpc/client'
server = XMLRPC::Client.new("127.0.0.1", "/RPC2", 9090)
puts server.call("upper_case", "The fat dog chased the cat on Elm Street.")
puts server.call("lower_case", "The fat dog chased the cat on Elm Street.")

5. 4번의 클라이언트가 접속 가능한 XML-RPC 서버

require 'webrick'
require 'xmlrpc/server.rb'

# create a servlet to handle XML-RPC requests:
servlet = XMLRPC::WEBrickServlet.new
servlet.add_handler("upper_case") { |a_string| a_string.upcase }
servlet.add_handler("lower_case") { |a_string| a_string.downcase }

# create a WEBrick instance to host this servlet:
server=WEBrick::HTTPServer.new(:Port => 9090)
trap("INT"){ server.shutdown }
server.mount("/RPC2", servlet)
server.start

6. XML Webservices 클라이언트

require 'soap/rpc/driver'
stub = SOAP::RPC::Driver.new("http://127.0.0.1:9090", "http://markwatson.com/Demo")
stub.add_method('upper_case', 'a_string')
stub.add_method('lower_case', 'a_string')
stub.add_method('times_string', 'a_string', 'a_number')

puts stub.lower_case("Jack and Jill went up the hill.")
puts stub.upper_case("Jack and Jill went up the hill.")
puts stub.times_string("Jack and Jill went up the hill.", 2)

7. 6번의 클라이언트가 접속할 수 있는 XML Webservices 서버

require ‘soap/rpc/standaloneserver’

# define a class that has three methods to call remotely:

class DemoClass
def upper_case(a_string)
a_string.upcase
end
def lower_case(a_string)
a_string.downcase
end
def times_string(a_string, a_number)
a_string * a_number
end
end

# create a SOAP enabled server for the methods in DemoClass:

class MyServer < SOAP::RPC::StandaloneServer def on_init demo = DemoClass.new add_method(demo, "upper_case", "a_string") add_method(demo, "lower_case", "a_string") add_method(demo, "times_string", "a_string", "a_number") end end server = MyServer.new("Demo", "http://markwatson.com/Demo", "0.0.0.0", 9090) trap('INT') { server.shutdown } server.start [/code]

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *