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;
    }
    

      

  • 相关阅读:
    结构体struct和typedef后面接指针的含义
    C++中关于指针初始化和使用NULL的理解
    (虚)继承类的内存占用大小
    为什么构造函数不能为虚函数
    C++中变量自动初始化的问题
    CY7C68013A的一点总结
    Altium designer总结
    在Linux系统上限制远程登录的IP
    linux系统如何限制其他用户登录
    使用秘钥对登录Linux系统
  • 原文地址:https://www.cnblogs.com/voipman/p/7519657.html
Copyright © 2011-2022 走看看