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

  

 

線程池模式server

#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模式blog

#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;
}
相關文章
相關標籤/搜索