Class: Thrift::NonblockingServer::IOManager

Inherits:
Object
  • Object
show all
Defined in:
lib/thrift/server/nonblockingserver.rb,
lib/thrift/server/nonblocking_server.rb

Overview

:nodoc:

Defined Under Namespace

Classes: Worker

Constant Summary collapse

DEFAULT_BUFFER =
2**20

Instance Method Summary collapse

Constructor Details

#initialize(processor, server_transport, transport_factory, protocol_factory, num, logger) ⇒ IOManager

Returns a new instance of IOManager.



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/thrift/server/nonblockingserver.rb', line 77

def initialize(processor, serverTransport, transportFactory, protocolFactory, num, logger)
  @processor = processor
  @serverTransport = serverTransport
  @transportFactory = transportFactory
  @protocolFactory = protocolFactory
  @num_threads = num
  @logger = logger
  @connections = []
  @buffers = Hash.new { |h,k| h[k] = '' }
  @signal_queue = Queue.new
  @signal_pipes = IO.pipe
  @signal_pipes[1].sync = true
  @worker_queue = Queue.new
  @shutdown_queue = Queue.new
end

Instance Method Details

#add_connection(socket) ⇒ Object



93
94
95
# File 'lib/thrift/server/nonblockingserver.rb', line 93

def add_connection(socket)
  signal [:connection, socket]
end

#ensure_closedObject



115
116
117
118
# File 'lib/thrift/server/nonblockingserver.rb', line 115

def ensure_closed
  kill_worker_threads if @worker_threads
  @iom_thread.kill
end

#shutdown(timeout = 0) ⇒ Object



104
105
106
107
108
109
110
111
112
113
# File 'lib/thrift/server/nonblockingserver.rb', line 104

def shutdown(timeout = 0)
  @logger.debug "#{self} is shutting down workers"
  @worker_queue.clear
  @num_threads.times { @worker_queue.push [:shutdown] }
  signal [:shutdown, timeout]
  @shutdown_queue.pop
  @signal_pipes[0].close
  @signal_pipes[1].close
  @logger.debug "#{self} is shutting down, goodbye"
end

#spawnObject



97
98
99
100
101
102
# File 'lib/thrift/server/nonblockingserver.rb', line 97

def spawn
  @iom_thread = Thread.new do
    @logger.debug "Starting #{self}"
    run
  end
end