File indexing completed on 2026-04-17 08:35:03
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef _THRIFT_SERVER_TTHREADEDSERVER_H_
0021 #define _THRIFT_SERVER_TTHREADEDSERVER_H_ 1
0022
0023 #include <map>
0024 #include <thrift/concurrency/Monitor.h>
0025 #include <thrift/concurrency/ThreadFactory.h>
0026 #include <thrift/concurrency/Thread.h>
0027 #include <thrift/server/TServerFramework.h>
0028
0029 namespace apache {
0030 namespace thrift {
0031 namespace server {
0032
0033
0034
0035
0036
0037
0038 class TThreadedServer : public TServerFramework {
0039 public:
0040 TThreadedServer(
0041 const std::shared_ptr<apache::thrift::TProcessorFactory>& processorFactory,
0042 const std::shared_ptr<apache::thrift::transport::TServerTransport>& serverTransport,
0043 const std::shared_ptr<apache::thrift::transport::TTransportFactory>& transportFactory,
0044 const std::shared_ptr<apache::thrift::protocol::TProtocolFactory>& protocolFactory,
0045 const std::shared_ptr<apache::thrift::concurrency::ThreadFactory>& threadFactory
0046 = std::shared_ptr<apache::thrift::concurrency::ThreadFactory>(
0047 new apache::thrift::concurrency::ThreadFactory(false)));
0048
0049 TThreadedServer(
0050 const std::shared_ptr<apache::thrift::TProcessor>& processor,
0051 const std::shared_ptr<apache::thrift::transport::TServerTransport>& serverTransport,
0052 const std::shared_ptr<apache::thrift::transport::TTransportFactory>& transportFactory,
0053 const std::shared_ptr<apache::thrift::protocol::TProtocolFactory>& protocolFactory,
0054 const std::shared_ptr<apache::thrift::concurrency::ThreadFactory>& threadFactory
0055 = std::shared_ptr<apache::thrift::concurrency::ThreadFactory>(
0056 new apache::thrift::concurrency::ThreadFactory(false)));
0057
0058 TThreadedServer(
0059 const std::shared_ptr<apache::thrift::TProcessorFactory>& processorFactory,
0060 const std::shared_ptr<apache::thrift::transport::TServerTransport>& serverTransport,
0061 const std::shared_ptr<apache::thrift::transport::TTransportFactory>& inputTransportFactory,
0062 const std::shared_ptr<apache::thrift::transport::TTransportFactory>& outputTransportFactory,
0063 const std::shared_ptr<apache::thrift::protocol::TProtocolFactory>& inputProtocolFactory,
0064 const std::shared_ptr<apache::thrift::protocol::TProtocolFactory>& outputProtocolFactory,
0065 const std::shared_ptr<apache::thrift::concurrency::ThreadFactory>& threadFactory
0066 = std::shared_ptr<apache::thrift::concurrency::ThreadFactory>(
0067 new apache::thrift::concurrency::ThreadFactory(false)));
0068
0069 TThreadedServer(
0070 const std::shared_ptr<apache::thrift::TProcessor>& processor,
0071 const std::shared_ptr<apache::thrift::transport::TServerTransport>& serverTransport,
0072 const std::shared_ptr<apache::thrift::transport::TTransportFactory>& inputTransportFactory,
0073 const std::shared_ptr<apache::thrift::transport::TTransportFactory>& outputTransportFactory,
0074 const std::shared_ptr<apache::thrift::protocol::TProtocolFactory>& inputProtocolFactory,
0075 const std::shared_ptr<apache::thrift::protocol::TProtocolFactory>& outputProtocolFactory,
0076 const std::shared_ptr<apache::thrift::concurrency::ThreadFactory>& threadFactory
0077 = std::shared_ptr<apache::thrift::concurrency::ThreadFactory>(
0078 new apache::thrift::concurrency::ThreadFactory(false)));
0079
0080 ~TThreadedServer() override;
0081
0082
0083
0084
0085
0086 void serve() override;
0087
0088 protected:
0089
0090
0091
0092
0093 virtual void drainDeadClients();
0094
0095
0096
0097
0098 void onClientConnected(const std::shared_ptr<TConnectedClient>& pClient) override ;
0099
0100
0101
0102
0103 void onClientDisconnected(TConnectedClient *pClient) override ;
0104
0105 std::shared_ptr<apache::thrift::concurrency::ThreadFactory> threadFactory_;
0106
0107
0108
0109
0110
0111
0112
0113
0114 class TConnectedClientRunner : public apache::thrift::concurrency::Runnable
0115 {
0116 public:
0117 TConnectedClientRunner(const std::shared_ptr<TConnectedClient>& pClient);
0118 ~TConnectedClientRunner() override;
0119 void run() override ;
0120 private:
0121 std::shared_ptr<TConnectedClient> pClient_;
0122 };
0123
0124 apache::thrift::concurrency::Monitor clientMonitor_;
0125
0126 typedef std::map<TConnectedClient *, std::shared_ptr<apache::thrift::concurrency::Thread> > ClientMap;
0127
0128
0129
0130
0131 ClientMap activeClientMap_;
0132
0133
0134
0135
0136 ClientMap deadClientMap_;
0137 };
0138
0139 }
0140 }
0141 }
0142
0143 #endif