Class: Pastry::Backend

Inherits:
Thin::Backends::Base
  • Object
show all
Defined in:
lib/pastry.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Backend



257
258
259
260
# File 'lib/pastry.rb', line 257

def initialize options = {}
  super()
  @timeout = options.fetch(:timeout, 30)
end

Instance Method Details

#disconnectObject



297
298
299
# File 'lib/pastry.rb', line 297

def disconnect
  EM.stop_server(@signature)
end

#initialize_connection(connection) ⇒ Object



271
272
273
274
# File 'lib/pastry.rb', line 271

def initialize_connection connection
  super
  connection.comm_inactivity_timeout = @timeout
end

#start(server) ⇒ Object



262
263
264
265
266
267
268
269
# File 'lib/pastry.rb', line 262

def start server
  @stopping = false
  @running  = true
  @server   = server

  trap_signals!
  @signature = EM.attach_server_socket(server, Thin::Connection, &method(:initialize_connection))
end

#trap_signals!Object



276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
# File 'lib/pastry.rb', line 276

def trap_signals!
  # ignore SIGCHLD, can be overriden by app.
  Signal.trap('CHLD', 'IGNORE')

  # close connections and stop gracefully
  %w(HUP QUIT).each do |signal|
    Signal.trap(signal) do
      stop
      EM.add_periodic_timer(1) { Kernel.exit! if @connections.empty? }
    end
  end

  # hard stop, discard requests and quit
  %w(INT TERM).each do |signal|
    Signal.trap(signal) do
      stop!
      Kernel.exit!
    end
  end
end