void doQuitJob() { char fileCntBuf[20] = {0}; snprintf(fileCntBuf, 20, "%llu", g_fileManager->getFileCntCurr()); config_file.SetConfigValue("FileCnt", fileCntBuf); FileManager::destroyInstance(); netlib_destroy(); log("I'm ready quit..."); }
int main(int argc, char* argv[]) {//test for(int i=0; i < argc; ++i) { if(strncmp(argv[i], "-d", 2) == 0) { if(daemon(1, 0, 1) < 0) { cout<<"daemon error"<<endl; return -1; } break; } } log("MsgServer max files can open: %d", getdtablesize()); char* listen_ip = config_file.GetConfigName("ListenIP"); char* str_listen_port = config_file.GetConfigName("ListenPort"); char* base_dir = config_file.GetConfigName("BaseDir"); char* str_file_cnt = config_file.GetConfigName("FileCnt"); char* str_files_per_dir = config_file.GetConfigName("FilesPerDir"); char* str_post_thread_count = config_file.GetConfigName("PostThreadCount"); char* str_get_thread_count = config_file.GetConfigName("GetThreadCount"); if (!listen_ip || !str_listen_port || !base_dir || !str_file_cnt || !str_files_per_dir || !str_post_thread_count || !str_get_thread_count) { log("config file miss, exit..."); return -1; } log("%s,%s",listen_ip, str_listen_port); uint16_t listen_port = atoi(str_listen_port); long long int fileCnt = atoll(str_file_cnt); int filesPerDir = atoi(str_files_per_dir); int nPostThreadCount = atoi(str_post_thread_count); int nGetThreadCount = atoi(str_get_thread_count); if(nPostThreadCount <= 0 || nGetThreadCount <= 0) { log("thread count is invalied"); return -1; } g_PostThreadPool.Init(nPostThreadCount); g_GetThreadPool.Init(nGetThreadCount); g_fileManager = FileManager::getInstance(listen_ip, base_dir, fileCnt, filesPerDir); int ret = g_fileManager->initDir(); if (ret) { printf("The BaseDir is set incorrectly :%s\n",base_dir); return ret; } ret = netlib_init(); if (ret == NETLIB_ERROR) return ret; CStrExplode listen_ip_list(listen_ip, ';'); for (uint32_t i = 0; i < listen_ip_list.GetItemCnt(); i++) { ret = netlib_listen(listen_ip_list.GetItem(i), listen_port, http_callback, NULL); if (ret == NETLIB_ERROR) return ret; } signal(SIGINT, Stop); signal (SIGTERM, Stop); signal (SIGQUIT, Stop); signal(SIGPIPE, SIG_IGN); signal (SIGHUP, SIG_IGN); printf("server start listen on: %s:%d\n", listen_ip, listen_port); init_http_conn(); printf("now enter the event loop...\n"); netlib_eventloop(); return 0; }
int main(int argc, char* argv[]) { if ((argc == 2) && (strcmp(argv[1], "-v") == 0)) { cout << "HttpMsgServer " << endl; cout << "Server Build:" << __DATE__ << __TIME__ << endl; return ERR_SUCCESS; } signal(SIGPIPE, SIG_IGN); srand(time(NULL)); //日志类初始化 if (!Logger.Init(2000, 0, 0)){ cout <<"log init failed!!!"<< endl; return -1; } /* 设置打印级别 */ Logger.SetLogLevel(0x0040, true); Logger.Log(INFO, "The Server max files can open: %d ", getdtablesize()); CConfigFileReader* configFile = new CConfigFileReader("httpsvr.conf"); char* listenIp = configFile->GetConfigName("ListenIP"); char* strListenPort = configFile->GetConfigName("ListenPort"); char* strThreadNum = configFile->GetConfigName("ThreadNum"); //初始化数据库连接及管理类 CDBManager* pDBManager = CDBManager::getInstance(configFile); if (!pDBManager) { Logger.Log(ERROR, "DBManager init failed"); return ERR_FAILED; } pDBManager->Init(); if (!listenIp || !strListenPort) { Logger.Log(ERROR, "config file miss, exit "); return ERR_FAILED; } int ret = netlib_init(); if (ret == NETLIB_ERROR){ return ret; } uint16_t listenPort = atoi(strListenPort); CStrExplode listen_ip_list(listenIp, ';'); for (uint32_t i = 0; i < listen_ip_list.GetItemCnt(); i++) { ret = netlib_listen(listen_ip_list.GetItem(i), listenPort, HttpCallback, NULL); if (ret == NETLIB_ERROR) return ret; } cout << "server start listen on: " << listenIp << listenPort << endl; uint32_t threadNum = atoi(strThreadNum); InitHttpConn(threadNum);//初始化线程,增加心跳定时器 cout << "now enter the event loop!" << endl; writePid(); netlib_eventloop(); return 0; }