Sha256: 371d2825447a96557455e92120a70d9892fc8c81bc7d3151f1046df3015c340d

Contents?: true

Size: 1.04 KB

Versions: 11

Compression:

Stored size: 1.04 KB

Contents

#!/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 einhorn_main
  puts "Called with ENV['EINHORN_FD_0']: #{ENV['EINHORN_FD_0']}"

  fd_num = Einhorn::Worker.socket!
  socket = Socket.for_fd(fd_num)

  # Came up successfully, so let's set up graceful handler and ACK the
  # master.
  Einhorn::Worker.graceful_shutdown do
    puts "Goodbye from #{$$}"
    exit(0)
  end
  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

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
einhorn-0.5.4 example/time_server
einhorn-0.5.3 example/time_server
einhorn-0.5.2 example/time_server
einhorn-0.5.1 example/time_server
einhorn-0.5.0 example/time_server
einhorn-0.4.9 example/time_server
einhorn-0.4.8 example/time_server
einhorn-0.4.7 example/time_server
einhorn-0.4.6 example/time_server
einhorn-0.4.5 example/time_server
einhorn-0.4.4 example/time_server