igrigorik / em-proxy
- Source
- Commits
- Network (14)
- Issues (0)
- Downloads (0)
- Wiki (1)
- Graphs
-
Branch:
master
Ilya Grigorik (author)
Tue Dec 22 06:47:36 -0800 2009
em-proxy /
| name | age | message | |
|---|---|---|---|
| |
README.rdoc | Sun Dec 13 00:16:28 -0800 2009 | |
| |
Rakefile | Sun Dec 20 14:11:11 -0800 2009 | |
| |
VERSION | Sun Oct 25 13:05:17 -0700 2009 | |
| |
examples/ | Mon Dec 21 10:24:39 -0800 2009 | |
| |
lib/ | Mon Dec 21 10:24:39 -0800 2009 | |
| |
spec/ | Tue Dec 22 06:46:13 -0800 2009 |
README.rdoc
EM-Proxy
EventMachine Proxy DSL for writing high-performance transparent / intercepting proxies in Ruby.
- Slides from RailsConf 2009: bit.ly/D7oWB
- GoGaRuCo notes & Slides: www.igvita.com/2009/04/20/ruby-proxies-for-scale-and-monitoring/
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, name|
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.
