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