RPC框架Thrift-python服務端運行模式源碼解析

Thrift的python服務端運行模式目前只支持四種,TSimpleServer,TThreadedServer,TThreadPoolServer,TForkingServer,下面依依解析

1.TSimpleServer

使用std阻止io的單線程服務器。一次只能接收和處理一個socket連接,效率比較低,一般只於測試和流程展示等。

class TSimpleServer(TServer):
    """Simple single-threaded server that just pumps around one transport."""

    def __init__(self, *args):
        TServer.__init__(self, *args)

    def serve(self):
        self.serverTransport.listen()
        while True:
            client = self.serverTransport.accept()
            if not client:
                continue

            itrans = self.inputTransportFactory.getTransport(client)
            iprot = self.inputProtocolFactory.getProtocol(itrans)

            # for THeaderProtocol, we must use the same protocol instance for
            # input and output so that the response is in the same dialect that
            # the server detected the request was in.
            if isinstance(self.inputProtocolFactory, THeaderProtocolFactory):
                otrans = None
                oprot = iprot
            else:
                otrans = self.outputTransportFactory.getTransport(client)
                oprot = self.outputProtocolFactory.getProtocol(otrans)

            try:
                while True:
                    self.processor.process(iprot, oprot)
            except TTransport.TTransportException:
                pass
            except Exception as x:
                logger.exception(x)

            itrans.close()
            if otrans:
                otrans.close()

可以看到只用了一個while循環一直接收socket,同一時間只能接收一個socket。 

2.TThreadedServer

3.TThreadPoolServer

4.TForkingServer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章