public
Description: EventMachine proxies for performance, monitoring and scale
Homepage: http://www.igvita.com/
Clone URL: git://github.com/igrigorik/em-proxy.git
name age message
file README.rdoc Sun Oct 25 13:06:32 -0700 2009 getting started README section [igrigorik]
file VERSION Sun Oct 25 13:05:17 -0700 2009 Version bump to 0.1.1 [igrigorik]
directory examples/ Sat Oct 03 11:38:00 -0700 2009 invoke :done callback in duplex connections [igrigorik]
directory lib/ Sat Oct 03 11:38:00 -0700 2009 invoke :done callback in duplex connections [igrigorik]
directory spec/ Sat Sep 26 10:45:21 -0700 2009 spec tests for em-proxy [igrigorik]
README.rdoc

EM-Proxy

EventMachine Proxy DSL for writing high-performance transparent / intercepting proxies in Ruby.

Getting started

  # install & configure gemcutter repos
  gem update --system
  gem install gemcutter
  gem tumble

  gem install em-proxy

  irb:0> require 'em-proxy'

Simple port forwarding proxy

    Proxy.start(:host => "0.0.0.0", :port => 80, :debug => true) do |conn|
      conn.server :srv, :host => "127.0.0.1", :port => 81

      # modify / process request stream
      conn.on_data do |data|
        p [:on_data, data]
        data
      end

      # modify / process response stream
      conn.on_response do |backend, resp|
        p [:on_response, backend, resp]
        resp
      end

      # termination logic
      conn.on_finish do |backend|
        p [:on_finish, name]

        # terminate connection (in duplex mode, you can terminate when prod is done)
        unbind if backend == :srv
      end
    end

For more examples see the /examples directory.

  • SMTP Spam Filtering
  • Duplicating traffic
  • Selective forwarding
  • Beanstalkd interceptor
  • etc.