Class: Thrift::ThreadPoolServer

### Home Classes Methods

### In Files

- lib/thrift/server/thread_pool_server.rb

### Parent

Thrift::BaseServer

### Methods

- ::new
- #rescuable_serve
- #serve

### Files

- CHANGELOG
- README
- Makefile

### Class/Module Index

Quicksearch

- Thrift
- Thrift::ApplicationException
- Thrift::BaseProtocol
- Thrift::BaseProtocolFactory
- Thrift::BaseServer
- Thrift::BaseServerTransport
- Thrift::BaseTransport
- Thrift::BaseTransportFactory
- Thrift::BinaryProtocol
- Thrift::BinaryProtocolAcceleratedFactory
- Thrift::BinaryProtocolFactory
- Thrift::BufferedTransport
- Thrift::BufferedTransportFactory
- Thrift::Client
- Thrift::CompactProtocol
- Thrift::CompactProtocol::CompactTypes
- Thrift::CompactProtocolFactory
- Thrift::Deserializer
- Thrift::Exception
- Thrift::FramedTransport
- Thrift::FramedTransportFactory
- Thrift::HTTPClientTransport
- Thrift::IOStreamTransport
- Thrift::MemoryBufferTransport
- Thrift::MessageTypes
- Thrift::MongrelHTTPServer
- Thrift::MongrelHTTPServer::Handler
- Thrift::NonblockingServer
- Thrift::Processor
- Thrift::ProtocolException
- Thrift::Serializer
- Thrift::ServerSocket
- Thrift::SimpleServer
- Thrift::Socket
- Thrift::Struct
- Thrift::Struct_Union
- Thrift::ThreadPoolServer
- Thrift::ThreadedServer
- Thrift::TransportException
- Thrift::TransportUtils
- Thrift::TypeError
- Thrift::Types
- Thrift::UNIXServerSocket
- Thrift::UNIXSocket
- Thrift::Union
- Fixnum

No matching classes.

# Thrift::ThreadPoolServer

### Public Class Methods

new(processor, server_transport, transport_factory=nil, protocol_factory=nil, num=20) click to toggle source

    # File lib/thrift/server/thread_pool_server.rb, line 24
    def initialize(processor, server_transport, transport_factory=nil, protocol_factory=nil, num=20)
      super(processor, server_transport, transport_factory, protocol_factory)
      @thread_q = SizedQueue.new(num)
      @exception_q = Queue.new
      @running = false
    end

### Public Instance Methods

rescuable_serve() click to toggle source

exceptions that happen in worker threads will be relayed here and must be caught. 'retry' can be used to continue. (threads will continue to run while the exception is being handled.)

    # File lib/thrift/server/thread_pool_server.rb, line 34
    def rescuable_serve
      Thread.new { serve } unless @running
      @running = true
      raise @exception_q.pop
    end

serve() click to toggle source

exceptions that happen in worker threads simply cause that thread to die and another to be spawned in its place.

    # File lib/thrift/server/thread_pool_server.rb, line 42
    def serve
      @server_transport.listen

      begin
        loop do
          @thread_q.push(:token)
          Thread.new do
            begin
              loop do
                client = @server_transport.accept
                trans = @transport_factory.get_transport(client)
                prot = @protocol_factory.get_protocol(trans)
                begin
                  loop do
                    @processor.process(prot, prot)
                  end
                rescue Thrift::TransportException, Thrift::ProtocolException => e
                ensure
                  trans.close
                end
              end
            rescue => e
              @exception_q.push(e)
            ensure
              @thread_q.pop # thread died!
            end
          end
        end
      ensure
        @server_transport.close
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.