Method: Thrift::ThreadPoolServer#serve

Defined in:
lib/thrift/server/thread_pool_server.rb

#serveObject

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



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 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