From a60ce1b1c9cdaefaeda88c91038aa54775a54b46 Mon Sep 17 00:00:00 2001 From: monktan Date: Fri, 20 Aug 2021 14:52:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0serverkeepalive=20hook?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/config.ini | 4 ++++ server/WebHook.cpp | 31 ++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/conf/config.ini b/conf/config.ini index abff3892..a173b4ba 100644 --- a/conf/config.ini +++ b/conf/config.ini @@ -131,8 +131,12 @@ on_stream_none_reader=https://127.0.0.1/index/hook/on_stream_none_reader on_stream_not_found=https://127.0.0.1/index/hook/on_stream_not_found #服务器启动报告,可以用于服务器的崩溃重启事件监听 on_server_started=https://127.0.0.1/index/hook/on_server_started +#server保活上报 +on_server_keepalive=https://127.0.0.1/index/hook/on_server_keepalive #hook api最大等待回复时间,单位秒 timeoutSec=10 +#keepalive间隔 +alive_interval=10.0 [http] #http服务器字符编码,windows上默认gb2312 diff --git a/server/WebHook.cpp b/server/WebHook.cpp index 73c4d00f..6c6532ee 100755 --- a/server/WebHook.cpp +++ b/server/WebHook.cpp @@ -42,7 +42,9 @@ const string kOnShellLogin = HOOK_FIELD"on_shell_login"; const string kOnStreamNoneReader = HOOK_FIELD"on_stream_none_reader"; const string kOnHttpAccess = HOOK_FIELD"on_http_access"; const string kOnServerStarted = HOOK_FIELD"on_server_started"; +const string kOnServerKeepalive = HOOK_FIELD"on_server_keepalive"; const string kAdminParams = HOOK_FIELD"admin_params"; +const string kAliveInterval = HOOK_FIELD"alive_interval"; onceToken token([](){ mINI::Instance()[kEnable] = false; @@ -61,7 +63,9 @@ onceToken token([](){ mINI::Instance()[kOnStreamNoneReader] = ""; mINI::Instance()[kOnHttpAccess] = ""; mINI::Instance()[kOnServerStarted] = ""; + mINI::Instance()[kOnServerKeepalive] = ""; mINI::Instance()[kAdminParams] = "secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc"; + mINI::Instance()[kAliveInterval] = 30.0; },nullptr); }//namespace Hook @@ -184,6 +188,28 @@ static void reportServerStarted(){ do_http_hook(hook_server_started,body, nullptr); } +// 服务器定时保活定时器 +Timer::Ptr g_keepalive_timer; +static void reportServerKeepalive() { + GET_CONFIG(bool,hook_enable,Hook::kEnable); + GET_CONFIG(string, hook_server_keepalive, Hook::kOnServerKeepalive); + if(!hook_enable || hook_server_keepalive.empty()){ + return; + } + + GET_CONFIG(float, alive_interval, Hook::kAliveInterval); + g_keepalive_timer = std::make_shared(alive_interval, [&](){ + ArgsType body; + body["data"]["MediaSource"] = (Json::UInt64)(ObjectStatistic::count()); + body["data"]["MultiMediaSourceMuxer"] = (Json::UInt64)(ObjectStatistic::count()); + + //执行hook + do_http_hook(hook_server_keepalive, body, nullptr); + + return true; + }, nullptr); +} + void installWebHook(){ GET_CONFIG(bool,hook_enable,Hook::kEnable); GET_CONFIG(string,hook_adminparams,Hook::kAdminParams); @@ -484,8 +510,11 @@ void installWebHook(){ //汇报服务器重新启动 reportServerStarted(); + + //定时上报保活 + reportServerKeepalive(); } void unInstallWebHook(){ - + g_keepalive_timer.reset(); }