Class: Thrift::NonblockingServer
- Inherits:
-
BaseServer
- Object
- BaseServer
- Thrift::NonblockingServer
- Defined in:
- lib/thrift/server/nonblockingserver.rb,
lib/thrift/server/nonblocking_server.rb
Overview
this class expects to always use a FramedTransport for reading messages
Defined Under Namespace
Classes: IOManager
Instance Method Summary collapse
-
#initialize(processor, server_transport, transport_factory = nil, protocol_factory = nil, num = 20, logger = nil) ⇒ NonblockingServer
constructor
A new instance of NonblockingServer.
- #serve ⇒ Object
- #shutdown(timeout = 0, block = true) ⇒ Object
Constructor Details
#initialize(processor, server_transport, transport_factory = nil, protocol_factory = nil, num = 20, logger = nil) ⇒ NonblockingServer
Returns a new instance of NonblockingServer.
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/thrift/server/nonblockingserver.rb', line 8 def initialize(processor, serverTransport, transportFactory=nil, protocolFactory=nil, num=20, logger = nil) super(processor, serverTransport, transportFactory, protocolFactory) @num_threads = num if logger.nil? @logger = Logger.new(STDERR) @logger.level = Logger::WARN else @logger = logger end @shutdown_semaphore = Mutex.new @transport_semaphore = Mutex.new end |
Instance Method Details
#serve ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/thrift/server/nonblockingserver.rb', line 21 def serve @logger.info "Starting #{self}" @serverTransport.listen @io_manager = start_io_manager begin loop do break if @serverTransport.closed? rd, = select([@serverTransport], nil, nil, 0.1) next if rd.nil? socket = @serverTransport.accept @logger.debug "Accepted socket: #{socket.inspect}" @io_manager.add_connection socket end rescue IOError => e end # we must be shutting down @logger.info "#{self} is shutting down, goodbye" ensure @transport_semaphore.synchronize do @serverTransport.close end @io_manager.ensure_closed unless @io_manager.nil? end |
#shutdown(timeout = 0, block = true) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/thrift/server/nonblockingserver.rb', line 46 def shutdown(timeout = 0, block = true) @shutdown_semaphore.synchronize do return if @is_shutdown @is_shutdown = true end # nonblocking is intended for calling from within a Handler # but we can't change the order of operations here, so lets thread shutdown_proc = lambda do @io_manager.shutdown(timeout) @transport_semaphore.synchronize do @serverTransport.close # this will break the accept loop end end if block shutdown_proc.call else Thread.new &shutdown_proc end end |