~/ruby/eventmachine/simple_server]$ cat server.rb require 'eventmachine' module EchoServer def post_init puts "-- someone connected to the echo server!" end def receive_data data send_data ">>>you sent: #{data}" puts "received #{data}" close_connection if data =~ /quit/i end def unbind puts "-- someone disconnected from the echo server!" end end # Note that this will block current thread. EventMachine.run { EventMachine.start_server "127.0.0.1", 8081, EchoServer }
[~/ruby/eventmachine/simple_server]$ cat Rakefile task :default => :server desc "run server" task :server do sh "ruby server.rb" end SERVER = "127.0.0.1 8081" M = %q{ And now, the end is near And so I face the final curtain My friend, I'll say it clear I'll state my case, of which I'm certain I've lived a life that's full I traveled each and ev'ry highway And more, much more than this, I did it my way quit }.split(/\n+/) desc "run a client" task :client do IO.popen("telnet #{SERVER}", "r+", :external_encoding=>"utf-8", :err=>[:child, :out]) do |chan| 3.times do output = chan.gets puts "SERVER says: #{output}" end M.each do |line| puts "client dending #{line}" chan.puts line output = chan.gets puts "SERVER says: #{output}" end end # popen end
[~/ruby/eventmachine/simple_server]$ rake ruby server.rb
[~/ruby/eventmachine/simple_server]$ rake client SERVER says: Trying 127.0.0.1... SERVER says: Connected to localhost. SERVER says: Escape character is '^]'. client dending SERVER says: >>>you sent: client dending And now, the end is near SERVER says: >>>you sent: And now, the end is near client dending And so I face the final curtain SERVER says: >>>you sent: And so I face the final curtain >>>you sent: client dending My friend, I'll say it clear SERVER says: >>>you sent: My friend, I'll say it clear client dending I'll state my case, of which I'm certain SERVER says: >>>you sent: I'll state my case, of which I'm certain client dending I've lived a life that's full SERVER says: >>>you sent: I've lived a life that's full >>>you sent: client dending I traveled each and ev'ry highway SERVER says: >>>you sent: I traveled each and ev'ry highway client dending And more, much more than this, I did it my way SERVER says: >>>you sent: And more, much more than this, I did it my way client dending quit SERVER says: Connection closed by foreign host.
[~/ruby/eventmachine/simple_server]$ rake ruby server.rb -- someone connected to the echo server! received received And now, the end is near received And so I face the final curtain received received My friend, I'll say it clear received I'll state my case, of which I'm certain received I've lived a life that's full received received I traveled each and ev'ry highway received And more, much more than this, I did it my way received quit -- someone disconnected from the echo server!
[~/ruby/eventmachine/simple(master)]$ cat callback_errback.rb require 'rubygems' require 'eventmachine' require 'em-http' urls = ARGV if urls.size < 1 puts "Usage: #{$0} <url> <url> <...>" exit end pending = urls.size EM.run do urls.each do |url| http = EM::HttpRequest.new(url).get http.callback { puts "#{url}\n#{http.response_header.status} - #{http.response.length} bytes\n" puts http.response pending -= 1 EM.stop if pending < 1 } http.errback { puts "#{url}\n" + http.error pending -= 1 EM.stop if pending < 1 } end end
[~/ruby/eventmachine/simple(master)]$ ruby callback_errback.rb 'http://www.google.com' http://www.google.com 302 - 258 bytes <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.es/?gws_rd=cr&ei=x2OSUtLYD4aatQb-74GgCQ">here</A>. </BODY></HTML>