0.一些参考资料
(参考资料1)对thrift的一个基本介绍可以参考:
http://wenku.baidu.com/link?url=LLL5H3qL4hJ3o6dfq0SBgztqtxYFR5vDyftwowKNRMWiIQ3t87mCu-GMZljxcZVryxxhqna1hM4eu3F7AyCMlC7fFy7yWl18IIl6nY7JKca
(参考资料2)thrift IDL定义可参考(就是定义结构化数据和服务的方法):
http://diwakergupta.github.io/thrift-missing-guide/#_defining_services
1.基本使用方法
TNonblockingServer是thrift提供的一种多线程非阻塞IO服务。
之所以从这里开始读代码,是因为TServer(TNonblockingServer是TServer的一个子类实现)是框架中比较最贴近用户实现部分的,各部分的划分请参阅(参考资料1)哈。
先看基本的使用:
1 // FooServing是我们自己定义的thrift服务 2 // FooServingProcessor是由thrift自动生成的类 3 // FooServingHandler是我们的业务实现类,90%的代码写在这个类中 4 shared_ptr<FooServingHandler> 5 handler(new FooServingHandler()); 6 shared_ptr<TProcessor> 7 processor(new FooServingProcessor(handler)); 8 9 shared_ptr<TProtocolFactory> 10 protocolFactory(new TBinaryProtocolFactory()); 11 12 shared_ptr<PosixThreadFactory> threadFactory(new PosixThreadFactory()); 13 shared_ptr<ThreadManager> threadManager = 14 ThreadManager::newSimpleThreadManager(thread_count); 15 threadManager->threadFactory(threadFactory); 16 threadManager->start(); 17 18 TNonblockingServer server(processor, 19 protocolFactory, 20 port, 21 threadManager); 22 server.setTaskExpireTime(expire_time); 23 server.serve();
当然TNonblockingServer的构造函数有多种实现,并不局限于以上的方式。handler实际上是我们实现的业务逻辑,processer是根据我们定义的服务(IDL文件)自动生成的处理类,它会调用我们的handler,而在server中会接收Client请求,将其转交processer处理。
2.serve函数
下面从TNonblockingServer的serve函数入手,继续看。
1 void TNonblockingServer::serve() { 2 3 if (ioThreads_.empty()) 4 registerEvents(NULL); // 初始化监听端口、创建ioThreads_、初始化ioThreadFactory_、初始化eventHandler_等 5 6 // Run the primary (listener) IO thread loop in our main thread; this will 7 // only return when the server is shutting down. 8 ioThreads_[0]->run(); // 这个是控制线程 9 10 // Ensure all threads are finished before exiting serve() 11 for (uint32_t i = 0; i < ioThreads_.size(); ++i) { 12 ioThreads_[i]->join(); 13 GlobalOutput.printf("TNonblocking: join done for IO thread #%d", i); 14 } 15 }
ioThreads_中的第一个线程是控制线程
未完待续。。。先回家过年啦
时间: 2024-10-11 18:28:08