def server(request): p1 = TProcessor(mux.ThingOneService, DispatcherOne()) p2 = TProcessor(mux.ThingTwoService, DispatcherTwo()) mux_proc = TMultiplexedProcessor() mux_proc.register_processor("ThingOneService", p1) mux_proc.register_processor("ThingTwoService", p2) _server = TThreadedServer(mux_proc, TServerSocket(unix_socket=sock_path), iprot_factory=TBinaryProtocolFactory(), itrans_factory=TBufferedTransportFactory()) ps = multiprocessing.Process(target=_server.serve) ps.start() time.sleep(0.1) def fin(): if ps.is_alive(): ps.terminate() try: os.remove(sock_path) except IOError: pass request.addfinalizer(fin)
def main(): dd_proc = TProcessor(dd_thrift.DingService, DingDispatcher()) pp_proc = TProcessor(pp_thrift.PingService, PingDispatcher()) mux_proc = TMultiplexedProcessor() mux_proc.register_processor(DD_SERVICE_NAME, dd_proc) mux_proc.register_processor(PP_SERVICE_NAME, pp_proc) server = TThreadedServer(mux_proc, TServerSocket(), iprot_factory=TBinaryProtocolFactory(), itrans_factory=TBufferedTransportFactory()) server.serve()
def create_multiplexed_server(services, socket_config, server_cls=TThreadedServer): """ 创建多路复用的Thrift Server :param services: 多路复用服务定义,如:[(service1, handler1, service_name1), (service2, handler2, service_name2),...] :param socket_config: Server的socket参数 :param server_cls: 启动的服务器类型 :return: Server对象 """ processor = TMultiplexedProcessor() for service, handler, service_name in services: processor.register_processor(service_name, TProcessor(service, handler)) return server_cls(processor, # processor TServerSocket(**socket_config), # transport TBufferedTransportFactory(), # transportFactory TBinaryProtocolFactory()) # protocolFactory