zoukankan      html  css  js  c++  java
  • Thrift的C++服务端(线程池和非阻塞)模式

    非阻塞模式

    #include "RpcServiceHandler.h"
    
    #include <thrift/concurrency/ThreadManager.h>
    #include <thrift/concurrency/PosixThreadFactory.h>
    #include <thrift/protocol/TBinaryProtocol.h>
    #include <thrift/server/TThreadPoolServer.h>
    #include <thrift/server/TNonblockingServer.h>
    #include <thrift/server/TThreadedServer.h>
    #include <thrift/transport/TServerSocket.h>
    #include <thrift/transport/TBufferTransports.h>
    #include <thrift/TToString.h>
    
    int main(int argc, char **argv)
    {
        RpcServiceHandler *rpcServiceHanlder = new RpcServiceHandler();
    
        int port = CFG()->getInt(kCfgProcPort);
        int workerCount = CFG()->getInt(kCfgProcWCnt);
    
        boost::shared_ptr<RpcServiceHandler> handler(rpcServiceHanlder);
        boost::shared_ptr<TProcessor> processor(new RpcServiceProcessor(handler));
        boost::shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
        boost::shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
    
        boost::shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(workerCount);
        boost::shared_ptr<PosixThreadFactory> threadFactory = boost::shared_ptr<PosixThreadFactory>(new PosixThreadFactory());
        threadManager->threadFactory(threadFactory);
        threadManager->start();
        
        TNonblockingServer server(processor,    
                                  protocolFactory,    
                                  port,    
                                  threadManager);
    
        std::cout << "Starting the server..." << std::endl;
    
        server.serve();
        return 0;
    }
    

      

    线程池模式

    #include "RpcServiceHandler.h"
    
    #include <thrift/concurrency/ThreadManager.h>
    #include <thrift/concurrency/PosixThreadFactory.h>
    #include <thrift/protocol/TBinaryProtocol.h>
    #include <thrift/server/TThreadPoolServer.h>
    #include <thrift/server/TNonblockingServer.h>
    #include <thrift/server/TThreadedServer.h>
    #include <thrift/transport/TServerSocket.h>
    #include <thrift/transport/TBufferTransports.h>
    #include <thrift/TToString.h>
    
    int main(int argc, char **argv)
    {
        RpcServiceHandler *rpcServiceHanlder = new RpcServiceHandler();
    
        int port = CFG()->getInt(kCfgProcPort);
        int workerCount = CFG()->getInt(kCfgProcWCnt);
    
        boost::shared_ptr<RpcServiceHandler> handler(rpcServiceHanlder);
        boost::shared_ptr<TProcessor> processor(new RpcServiceProcessor(handler));
        boost::shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
        boost::shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
        boost::shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
    
        boost::shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(workerCount);
        boost::shared_ptr<PosixThreadFactory> threadFactory = boost::shared_ptr<PosixThreadFactory>(new PosixThreadFactory());
        threadManager->threadFactory(threadFactory);
        threadManager->start();
        
        TThreadPoolServer server(processor,
                                 serverTransport,
                                 transportFactory,
                                 protocolFactory,
                                 threadManager);
    
        std::cout << "Starting the server..." << std::endl;
    
        server.serve();
        return 0;
    }
    

    单独Server模式

    #include "RpcServiceHandler.h"
    
    #include <thrift/protocol/TBinaryProtocol.h>
    #include <thrift/server/TSimpleServer.h>
    #include <thrift/transport/TServerSocket.h>
    #include <thrift/transport/TBufferTransports.h>
    #include <thrift/TToString.h>
    
    int main(int argc, char **argv)
    {
        RpcServiceHandler *rpcServiceHanlder = new RpcServiceHandler();
    
        int port = CFG()->getInt(kCfgProcPort);
    
        boost::shared_ptr<RpcServiceHandler> handler(rpcServiceHanlder);
        boost::shared_ptr<TProcessor> processor(new RpcServiceProcessor(handler));
        boost::shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
        boost::shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
        boost::shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
    
    
        std::cout << "Starting the server..." << std::endl;
        TSimpleServer server(processor, serverTransport, transportFactory, protocolFactory);
    
        server.serve();
        return 0;
    }
    

      

  • 相关阅读:
    大话重构读书笔记——保险索下的系统重构
    大话重构读书笔记——小步快跑的开发模式
    大话重构读书笔记——基础篇一
    [C#高级编程]基础知识摘要一
    测试基础
    WatiN和HttpWatch交互简介
    WatiN框架学习二——对弹窗的处理
    WatiN框架学习
    [C#高级编程].NET体系结构
    http协议的API
  • 原文地址:https://www.cnblogs.com/voipman/p/7519657.html
Copyright © 2011-2022 走看看