Esempio n. 1
0
static void master_proc_loop()
{
    if (reactor::instance()->reactor_init() < 0) {
        return;
    }

    std::vector<pid_t> work_pid_vec;
    ///向反应器注册socketpair
    std::vector<worker_proc_t>::iterator it = g_worker_proc_vec.begin();
    for (; it != g_worker_proc_vec.end(); ++it) {
        work_pid_vec.push_back(it->worker_pid);
        (it->p_sockpair->get_ipc_conn())->set_sockpair_type(SOCKPAIR_TYPE_1);
        if ((it->p_sockpair)->open() < 0) {
            return;
        }
    }

    ///实例化http回调接口函数对象
    http_inspector http_inspector_inst(work_pid_vec);
    http_serv* p_http_serv = NULL;

    char buf[10] = {0};
    g_p_ini_file->read_string("WorkInfo", "internal_http_serv", buf, sizeof(buf), NULL);
    if (!strncasecmp(buf, "on", 2)) {
        char http_serv_ip[16] = {0};
        u_short http_serv_port = 0;
        ///开启http监控器
        g_p_ini_file->read_string("WorkInfo",
                                  "internal_http_serv_ip",
                                  http_serv_ip,
                                  sizeof(http_serv_ip),
                                  "127.0.0.1");
        http_serv_port = g_p_ini_file->read_int("WorkInfo",
                                                "internal_http_serv_port",
                                                8080);
        inet_address serv_addr(http_serv_ip, http_serv_port);
        p_http_serv = new http_serv(serv_addr);
        assert(p_http_serv);
        p_http_serv->set_http_callback(http_inspector_inst);
        p_http_serv->start();
    }

    while (!g_stop && !g_restart) {
        reactor::instance()->reactor_wait(500);
    }

    if (p_http_serv) {
        delete p_http_serv;
        p_http_serv = NULL;
    }

    if (g_dll_inst.fini_service) {
        g_dll_inst.fini_service(PROC_MAIN);
    }

    if (connections_pool<connection<sock_stream> >::instance()) {
        connections_pool<connection<sock_stream> >::instance()->destroy_conns_pool();
        delete connections_pool<connection<sock_stream> >::instance();
    }
    if (connections_pool<connection<sock_dgram> >::instance()) {
        connections_pool<connection<sock_dgram> >::instance()->destroy_conns_pool();
        delete connections_pool<connection<sock_dgram> >::instance();
    }
    if (connections_pool<connection<vpipe_sockpair> >::instance()) {
        connections_pool<connection<vpipe_sockpair> >::instance()->destroy_conns_pool();
        delete connections_pool<connection<vpipe_sockpair> >::instance();
    }

    std::list<acceptor<connection<sock_stream>, sock_acceptor>* >::iterator tcp_it;
    for (tcp_it = g_tcp_acceptor_list.begin();
         tcp_it != g_tcp_acceptor_list.end();
         ++tcp_it) {
        delete *tcp_it;
        *tcp_it = NULL;
    }

    std::list<acceptor<connection<sock_dgram>, sock_dgram>* >::iterator udp_it;
    for (udp_it = g_udp_acceptor_list.begin();
         udp_it != g_udp_acceptor_list.end();
         ++udp_it) {
        delete *udp_it;
        *udp_it = NULL;
    }

    if (reactor::instance()) {
        reactor::instance()->reactor_fini();
        delete reactor::instance();
    }

}
Esempio n. 2
0
static void *
consumer (void *)
{
  ACE_UPIPE_Stream c_stream;

  // Set the high water mark to size to achieve optimum performance.

  int wm = size * iterations;

  if (c_stream.control (ACE_IO_Cntl_Msg::SET_HWM,
                        &wm) == -1)
    ACE_DEBUG ((LM_DEBUG,
                "set HWM failed\n"));

  ACE_UPIPE_Addr serv_addr (ACE_TEXT("pattern"));

  // accept will wait up to 4 seconds
  ACE_UPIPE_Acceptor acc (serv_addr);

  ACE_DEBUG ((LM_DEBUG,
              "(%t) consumer spawning the supplier thread\n"));

  // Spawn the supplier thread.
  if (ACE_Thread_Manager::instance ()->spawn (ACE_THR_FUNC (supplier),
                                              (void *) 0,
                                              THR_NEW_LWP | THR_DETACHED) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "%p\n",
                       "spawn"),
                      0);

  ACE_DEBUG ((LM_DEBUG,
              "(%t) consumer starting accept\n"));

  if (acc.accept (c_stream) == -1)
    ACE_ERROR ((LM_ERROR,
                "(%t) %p\n",
                "ACE_UPIPE_Acceptor.accept failed"));

  // Time measurement.
  time_t currsec;
  ACE_OS::time (&currsec);
  time_t start = (time_t) currsec;

  int received_messages = 0;

  for (ACE_Message_Block *mb = 0;
       c_stream.recv (mb) != -1 && mb->size () != 0;
       mb->release ())
    received_messages++;

  ACE_OS::time (&currsec);
  time_t secs = (time_t) currsec - start;

  ACE_DEBUG ((LM_DEBUG,
              "(%t) Transferred %d blocks of size %d\n"
              "The program ran %d seconds\n",
              received_messages, size, secs));
  c_stream.close ();
  return 0;
}