Ejemplo n.º 1
0
void SailDbServer::serve()
{
    int listen = 3909;
    int server_threads = 30;

    shared_ptr < TProtocolFactory > protocolFactory(
            new TBinaryProtocolFactory());
    shared_ptr<SailDbHandle> handler(new SailDbHandle(_db)); // 多线程共享此对象
    shared_ptr < TProcessor > processor(new SailDbProcessor(handler));

    shared_ptr < TServerTransport > serverTransport(new TServerSocket(listen));
    shared_ptr < TTransportFactory > transportFactory(
            new TBufferedTransportFactory());
            //new TFramedTransportFactory());

    shared_ptr < ThreadManager > threadManager
            = ThreadManager::newSimpleThreadManager(server_threads);
    shared_ptr < PosixThreadFactory > threadFactory = shared_ptr<
            PosixThreadFactory> (new PosixThreadFactory());
    threadManager->threadFactory(threadFactory);
    threadManager->start();
	/*TThreadPoolServer server(processor, serverTransport, transportFactory,
            protocolFactory, threadManager);*/
	TNonblockingServer server(processor, protocolFactory, listen, threadManager);
    //DOMOB_WRITE_LOG(LOG_NOTICE, "start server ...");
    server.serve();
}
Ejemplo n.º 2
0
void serverThread(int port, boost::shared_ptr<TProcessor> &processor) {
  boost::shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
  boost::shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
  boost::shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());

  boost::shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(THREADS);
  boost::shared_ptr<PosixThreadFactory> threadFactory = boost::shared_ptr<PosixThreadFactory>(new PosixThreadFactory());
  threadManager->threadFactory(threadFactory);
  threadManager->start();

  TThreadPoolServer server(processor, serverTransport, transportFactory, protocolFactory, threadManager);
  server.serve();
  cout << "should never reach this part" << endl;
}
Ejemplo n.º 3
0
void* WatDHTServer::start_rpc_server(void* param) {
  WatDHTServer* dht = static_cast<WatDHTServer*>(param);
  shared_ptr<WatDHTHandler> handler(new WatDHTHandler(dht));
  shared_ptr<TProcessor> processor(new WatDHTProcessor(handler)); 
  shared_ptr<TServerTransport> serverTransport(
      new TServerSocket(dht->get_port()));
  shared_ptr<TTransportFactory> transportFactory(
      new TBufferedTransportFactory());
  shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
  shared_ptr<ThreadManager> threadManager = 
      ThreadManager::newSimpleThreadManager(num_rpc_threads, 0);
  shared_ptr<PosixThreadFactory> threadFactory = 
      shared_ptr<PosixThreadFactory>(new PosixThreadFactory());
  threadManager->threadFactory(threadFactory);
  threadManager->start();
  TThreadedServer* server = new TThreadedServer(
      processor, serverTransport, transportFactory, protocolFactory);
  dht->set_rpc_server(server);
  server->serve();
  return NULL;
}
Ejemplo n.º 4
0
void ExtensionRunner::enter() {
  // Set the socket information for the extension manager.
  auto socket_path = path_;

  // Create the thrift instances.
  OSQUERY_THRIFT_POINTER::shared_ptr<ExtensionHandler> handler(
      new ExtensionHandler(uuid_));
  OSQUERY_THRIFT_POINTER::shared_ptr<TProcessor> processor(
      new ExtensionProcessor(handler));
  OSQUERY_THRIFT_POINTER::shared_ptr<TServerTransport> serverTransport(
      new TServerSocket(socket_path));
  OSQUERY_THRIFT_POINTER::shared_ptr<TTransportFactory> transportFactory(
      new TBufferedTransportFactory());
  OSQUERY_THRIFT_POINTER::shared_ptr<TProtocolFactory> protocolFactory(
      new TBinaryProtocolFactory());

  OSQUERY_THRIFT_POINTER::shared_ptr<ThreadManager> threadManager =
      ThreadManager::newSimpleThreadManager(FLAGS_worker_threads);
  OSQUERY_THRIFT_POINTER::shared_ptr<PosixThreadFactory> threadFactory =
      OSQUERY_THRIFT_POINTER::shared_ptr<PosixThreadFactory>(
          new PosixThreadFactory());
  threadManager->threadFactory(threadFactory);
  threadManager->start();

  // Start the Thrift server's run loop.
  try {
    VLOG(1) << "Extension service starting: " << socket_path;
    TThreadPoolServer server(processor,
                             serverTransport,
                             transportFactory,
                             protocolFactory,
                             threadManager);
    server.serve();
  } catch (const std::exception& e) {
    LOG(ERROR) << "Cannot start extension handler: " << socket_path << " ("
               << e.what() << ")";
    return;
  }
}
Ejemplo n.º 5
0
int ClientServerMain()
{
    LocalMatcher matcher;

    uint64_t clientId = 1;

    uint8_t connectTokenData[ConnectTokenBytes];
    uint8_t connectTokenNonce[NonceBytes];

    uint8_t clientToServerKey[KeyBytes];
    uint8_t serverToClientKey[KeyBytes];

    int numServerAddresses;
    Address serverAddresses[MaxServersPerConnectToken];

    memset( connectTokenNonce, 0, NonceBytes );

    if ( !matcher.RequestMatch( clientId, connectTokenData, connectTokenNonce, clientToServerKey, serverToClientKey, numServerAddresses, serverAddresses ) )
    {
        printf( "error: request match failed\n" );
        return 1;
    }

    ClientServerPacketFactory packetFactory;

    Address clientAddress( "::1", ClientPort );
    Address serverAddress( "::1", ServerPort );

    GameNetworkTransport clientTransport( packetFactory, clientAddress );
    GameNetworkTransport serverTransport( packetFactory, serverAddress );

    if ( clientTransport.GetError() != SOCKET_ERROR_NONE || serverTransport.GetError() != SOCKET_ERROR_NONE )
    {
        printf( "error: failed to initialize sockets\n" );
        return 1;
    }
    
    const int NumIterations = 20;

    double time = 0.0;

    GameClient client( GetDefaultAllocator(), clientTransport );

    GameServer server( GetDefaultAllocator(), serverTransport );

    server.SetServerAddress( serverAddress );

    server.Start();
    
    client.Connect( serverAddress, connectTokenData, connectTokenNonce, clientToServerKey, serverToClientKey );

    for ( int i = 0; i < NumIterations; ++i )
    {
        client.SendPackets();
        server.SendPackets();

        clientTransport.WritePackets();
        serverTransport.WritePackets();

        clientTransport.ReadPackets();
        serverTransport.ReadPackets();

        client.ReceivePackets();
        server.ReceivePackets();

        client.CheckForTimeOut();
        server.CheckForTimeOut();

        if ( client.ConnectionFailed() )
        {
            printf( "error: client connect failed!\n" );
            break;
        }

        if ( client.IsConnected() && server.GetNumConnectedClients() == 1 )
            client.Disconnect();

        time += 0.1f;

        if ( !client.IsConnecting() && !client.IsConnected() && server.GetNumConnectedClients() == 0 )
            break;

        client.AdvanceTime( time );
        server.AdvanceTime( time );

        clientTransport.AdvanceTime( time );
        serverTransport.AdvanceTime( time );
    }

    client.Disconnect();

    server.Stop();

    return 0;
}