Eventmachine Echo Server Example

```ruby require 'rubygems' require 'eventmachine' require 'logger' # # Each connection creates a new EchoServer. # module EchoServer LOG = Logger.new('echo.log') # # Called by the event loop immediately after the network connection has been # established, and before resumption of the network loop. # def post_init LOG.info "-- Connection established #{remote_ip} --" end # # Called by the event loop whenever data has been received by the network # connection. It is never called by user code. # def receive_data data message = "#{remote_ip}: #{data}" LOG.info message send_data message close_connection if data =~ /quit/i end # # Called by the framework whenever a connection (either a server or client # connection) is closed. # def unbind LOG.info "-- Connection closed #{remote_ip} --" end # # Return the IP and port of the remote client. # def remote_ip @remote_ip ||= begin port, ip = Socket.unpack_sockaddr_in(get_peername) "#{ip}:#{port}" end end end EventMachine::run do Signal.trap("INT") { EventMachine.stop } Signal.trap("TERM") { EventMachine.stop } EventMachine::start_server "0.0.0.0", 8080, EchoServer end ``` Use telnet to test it: ```ruby $ telnet localhost 8080 ```