Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| #!/usr/bin/env ruby | |
| # | |
| # A simple example showing how to use Einhorn's shared-socket | |
| # features. Einhorn translates the (addr:port[,flags...]) bind spec in | |
| # into a file descriptor number in the EINHORN_FD_# environment | |
| # variables. | |
| # | |
| # Invoke through Einhorn as | |
| # | |
| # einhorn -b 127.0.0.1:2345,r ./time_server | |
| # | |
| # or, if you want to try out preloading: | |
| # | |
| # einhorn -b 127.0.0.1:2345,r -p ./time_server ./time_server | |
| require 'rubygems' | |
| require 'einhorn/worker' | |
| def log(msg) | |
| puts "=== [#{$$}] #{msg}" | |
| end | |
| def einhorn_main | |
| log "Called with ENV['EINHORN_FD_0']: #{ENV['EINHORN_FD_0']}" | |
| fd_num = Einhorn::Worker.socket! | |
| socket = Socket.for_fd(fd_num) | |
| sleep_before_shutdown = 0 | |
| sleep_before_ack = 0 | |
| # Came up successfully, so let's set up graceful handler and ACK the | |
| # master. | |
| Einhorn::Worker.graceful_shutdown do | |
| if sleep_before_shutdown > 0 | |
| log "sleeping #{sleep_before_shutdown}s before shutdown" | |
| sleep sleep_before_shutdown | |
| end | |
| log "Goodbye!" | |
| exit(0) | |
| end | |
| if sleep_before_ack > 0 | |
| log "sleeping #{sleep_before_ack}s before ack" | |
| sleep sleep_before_ack | |
| end | |
| log "worker ack" | |
| Einhorn::Worker.ack! | |
| # Real work happens here. | |
| begin | |
| while true | |
| accepted, _ = socket.accept | |
| accepted.write("[#{$$}] The current time is: #{Time.now}!\n") | |
| accepted.close | |
| end | |
| rescue Exception | |
| end | |
| end | |
| if $0 == __FILE__ | |
| einhorn_main | |
| end |