From 7243969fb8747d294125229ad03e3330028afb94 Mon Sep 17 00:00:00 2001 From: i7-8700 <1281261856@qq.com> Date: Fri, 18 Sep 2020 06:42:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E7=B2=BE=E7=A1=AE=E7=9A=84=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/bench_client/bench_client.cpp | 50 ++++++++++--------- .../bench_client/bench_client.vcxproj.user | 2 +- examples/bench_client_ex/bench_client_ex.cpp | 5 +- .../server_demo_libevent.cpp | 5 +- .../server_demo_libevent_linux.vcxproj.user | 2 +- 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/examples/bench_client/bench_client.cpp b/examples/bench_client/bench_client.cpp index 56fc119..d46aacb 100644 --- a/examples/bench_client/bench_client.cpp +++ b/examples/bench_client/bench_client.cpp @@ -71,8 +71,8 @@ struct Session { int id = 0; std::string acct = {}; AdemcoId ademco_id = 0; - ADEMCO_EVENT type = EVENT_I_AM_GPRS; - ADEMCO_EVENT status = EVENT_ARM; + //ADEMCO_EVENT type = EVENT_I_AM_GPRS; + //ADEMCO_EVENT status = EVENT_ARM; uint16_t seq = 0; uint16_t nextSeq() { if (++seq == 10000) { seq = 1; } return seq; } @@ -106,21 +106,6 @@ void handle_ademco_msg(Session* session, bufferevent* bev) if (print_data) { printf("session #%d recv:%s\n", session->id, session->packet.toString().data()); } - auto output = bufferevent_get_output(bev); - switch (session->packet.id_.eid_) { - case AdemcoMsgId::id_ack: - { - auto now = std::chrono::steady_clock::now(); - char buf[1024]; - session->lastTimePacketSize = session->packet.make_null(buf, sizeof(buf), session->nextSeq(), session->acct, session->ademco_id); - evbuffer_add(output, buf, session->lastTimePacketSize); - auto us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - now).count(); - session->encodeTime += us; - } - break; - default: - break; - } } void readcb(struct bufferevent* bev, void* user_data) @@ -131,11 +116,12 @@ void readcb(struct bufferevent* bev, void* user_data) while (1) { size_t len = evbuffer_get_length(input); if (len < 9) { return; } - char buff[1024] = { 0 }; - evbuffer_copyout(input, buff, std::min(len, sizeof(buff))); + char buff[4096] = { 0 }; + len = std::min(len, sizeof(buff)); + evbuffer_copyout(input, buff, len); size_t cb_commited = 0; auto now = std::chrono::steady_clock::now(); - auto res = session->packet.parse(buff, 1024, cb_commited); + auto res = session->packet.parse(buff, len, cb_commited); auto us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - now).count(); session->decodeTime += us; bool done = false; @@ -163,9 +149,20 @@ void readcb(struct bufferevent* bev, void* user_data) void writecb(struct bufferevent* bev, void* user_data) { auto session = (Session*)user_data; - if (0 == evbuffer_get_length(bufferevent_get_output(bev))) { + auto output = bufferevent_get_output(bev); + if (0 == evbuffer_get_length(output)) { session->bytesWritten += session->lastTimePacketSize; session->msgWritten++; + + auto now = std::chrono::steady_clock::now(); + char buf[1024]; + session->lastTimePacketSize = session->packet.make_null(buf, sizeof(buf), session->nextSeq(), session->acct, session->ademco_id); + evbuffer_add(output, buf, session->lastTimePacketSize); + auto us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - now).count(); + session->encodeTime += us; + if (print_data) { + printf("session #%d send:%s\n", session->id, session->packet.toString().data()); + } } } @@ -194,7 +191,7 @@ void eventcb(struct bufferevent* bev, short events, void* user_data) printf("All connected\n"); } } - char buf[1024]; + /*char buf[1024]; session->lastTimePacketSize = session->packet.make_hb(buf, sizeof(buf), session->nextSeq(), session->acct, session->ademco_id, 0, session->status, 0); if (print_data) { @@ -205,7 +202,14 @@ void eventcb(struct bufferevent* bev, short events, void* user_data) if (print_data) { printf("session #%d send:%s\n", session->id, session->packet.toString().data()); } + evbuffer_add(bufferevent_get_output(bev), buf, session->lastTimePacketSize);*/ + char buf[1024]; + session->lastTimePacketSize = session->packet.make_null(buf, sizeof(buf), + session->nextSeq(), session->acct, session->ademco_id); evbuffer_add(bufferevent_get_output(bev), buf, session->lastTimePacketSize); + if (print_data) { + printf("session #%d send:%s\n", session->id, session->packet.toString().data()); + } auto base = bufferevent_get_base(bev); session->timer = event_new(base, -1, EV_TIMEOUT, timer_cb, session); @@ -251,7 +255,7 @@ void eventcb(struct bufferevent* bev, short events, void* user_data) "Decode average time %.2f us, %.2f packets/s\n", totalBytesRead / 1024.0 / 1024, totalMsgRead, totalBytesWrite / 1024.0 / 1024, totalMsgWritten, (totalBytesRead + totalBytesWrite) * 1.0 / (totalMsgRead + totalMsgWritten), - totalBytesRead * 1.0 / (timeout * 1024.0 * 1024), totalMsgRead * 1.0 / timeout, + (totalBytesRead + totalBytesWrite) * 1.0 / (timeout * 1024.0 * 1024), (totalBytesRead + totalBytesWrite) * 1.0 / timeout, encodeSpeed, 1000000.0 / encodeSpeed, decodeSpeed, 1000000.0 / decodeSpeed); } diff --git a/examples/bench_client/bench_client.vcxproj.user b/examples/bench_client/bench_client.vcxproj.user index 6c2ab10..df3812f 100644 --- a/examples/bench_client/bench_client.vcxproj.user +++ b/examples/bench_client/bench_client.vcxproj.user @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LocalDebuggerCommandArguments>192.168.1.90 12345 1 1 0 30 1</LocalDebuggerCommandArguments> + <LocalDebuggerCommandArguments>192.168.1.166 12345 6 1200 30 0</LocalDebuggerCommandArguments> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> diff --git a/examples/bench_client_ex/bench_client_ex.cpp b/examples/bench_client_ex/bench_client_ex.cpp index 0aeba38..6a170b9 100644 --- a/examples/bench_client_ex/bench_client_ex.cpp +++ b/examples/bench_client_ex/bench_client_ex.cpp @@ -139,10 +139,11 @@ void readcb(struct bufferevent* bev, void* user_data) size_t len = evbuffer_get_length(input); if (len < 9) { return; } char buff[1024] = { 0 }; - evbuffer_copyout(input, buff, std::min(len, sizeof(buff))); + len = std::min(len, sizeof(buff)); + evbuffer_copyout(input, buff, len); size_t cb_commited = 0; auto now = std::chrono::steady_clock::now(); - auto res = session->packet.parse(buff, 1024, cb_commited); + auto res = session->packet.parse(buff, len, cb_commited); auto us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - now).count(); session->decodeTime += us; bool done = false; diff --git a/examples/server_demo_libevent/server_demo_libevent.cpp b/examples/server_demo_libevent/server_demo_libevent.cpp index 80042fd..a46c820 100644 --- a/examples/server_demo_libevent/server_demo_libevent.cpp +++ b/examples/server_demo_libevent/server_demo_libevent.cpp @@ -572,9 +572,10 @@ void readcb(struct bufferevent* bev, void* user_data) size_t len = evbuffer_get_length(input); if (len < 9) { return; } char buff[1024] = { 0 }; - evbuffer_copyout(input, buff, std::min(len, sizeof(buff))); + len = std::min(len, sizeof(buff)); + evbuffer_copyout(input, buff, len); size_t cb_commited = 0; - auto res = context->packet.parse(buff, 1024, cb_commited); + auto res = context->packet.parse(buff, len, cb_commited); bool done = false; switch (res) { case ademco::ParseResult::RESULT_OK: diff --git a/examples/server_demo_libevent_linux/server_demo_libevent_linux.vcxproj.user b/examples/server_demo_libevent_linux/server_demo_libevent_linux.vcxproj.user index 54fb827..bfca9a1 100644 --- a/examples/server_demo_libevent_linux/server_demo_libevent_linux.vcxproj.user +++ b/examples/server_demo_libevent_linux/server_demo_libevent_linux.vcxproj.user @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <RemoteTarget>1735438401;www.hbwechatserver.com (username=, port=22, authentication=Password)</RemoteTarget> + <RemoteTarget>-2055866198;192.168.1.166 (username=, port=22, authentication=Password)</RemoteTarget> <RemoteDebuggerCommand>server_demo_libevent_linux</RemoteDebuggerCommand> <RemoteDebuggerWorkingDirectory>/root/vsprojects/server_demo_libevent_linux/examples/server_demo_libevent_linux/bin/x64/Debug</RemoteDebuggerWorkingDirectory> <DebuggerFlavor>LinuxDebugger</DebuggerFlavor> -- 2.18.1