Skip to content

Instantly share code, notes, and snippets.

@mutle
Created April 6, 2011 22:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mutle/906646 to your computer and use it in GitHub Desktop.
Save mutle/906646 to your computer and use it in GitHub Desktop.
require 'actor'
require 'http'
require 'http/socket'
class ServerActor
attr_accessor :app
def initialize(app)
@app = app
@actor = Actor.new do
begin
io = HTTP::Socket.new(Actor.receive)
env = io.parse_request
response = @app.call(env)
io.send_response response
rescue => e
puts "Exception in Server Actor: #{e.message if e.respond_to?(:message)}\n#{e.awesome_backtrace}"
ensure
io.close if io
end
end
end
def process(request)
@actor << request
end
end
class Server
[...]
def start
@socket = TCPServer.new(@address, @port.to_i)
log "Server running at #{@address}:#{@port}"
loop do
conn = @socket.accept
actor = ServerActor.new(@app)
actor.process(conn)
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment