优化令牌统计

This commit is contained in:
Stone 2016-06-03 15:24:38 +00:00
parent 17d89d6eb6
commit 5f6850f452
3 changed files with 50 additions and 32 deletions

View File

@ -31,6 +31,8 @@ public:
int ReadReply; int ReadReply;
int Write; int Write;
int WriteReply; int WriteReply;
int Invoke;
int InvokeReply;
TokenStat(); TokenStat();
~TokenStat(); ~TokenStat();
@ -241,8 +243,6 @@ static byte _Sequence = 0;
bool TokenController::Send(Message& msg) bool TokenController::Send(Message& msg)
{ {
TS("TokenController::Send"); TS("TokenController::Send");
// 未登录,登录注册,握手可通过
//if(Token == 0&&!( msg.Code <= 0x2||msg.Code == 0x07)) return false;
//static byte _Sequence = 0; //static byte _Sequence = 0;
auto& tmsg = (TokenMessage&)msg; auto& tmsg = (TokenMessage&)msg;
@ -260,8 +260,10 @@ bool TokenController::Send(Message& msg)
// 如果没有传输口处于打开状态,则发送失败 // 如果没有传输口处于打开状态,则发送失败
if(!Port->Open()) return false; if(!Port->Open()) return false;
byte buf[1472]; //byte buf[1472];
Stream ms(buf, ArrayLength(buf)); //Stream ms(buf, ArrayLength(buf));
byte buf[128];
MemoStream ms(buf, ArrayLength(buf));
// 带有负载数据,需要合并成为一段连续的内存 // 带有负载数据,需要合并成为一段连续的内存
msg.Write(ms); msg.Write(ms);
@ -319,7 +321,7 @@ void TokenController::ShowMessage(cstring action, const Message& msg)
bool TokenController::StartSendStat(byte code) bool TokenController::StartSendStat(byte code)
{ {
TS("TokenController::StartSendStat"); //TS("TokenController::StartSendStat");
auto st = Stat; auto st = Stat;
@ -331,18 +333,24 @@ bool TokenController::StartSendStat(byte code)
} }
st->SendRequest++; st->SendRequest++;
byte code2 = code & 0x3F; byte tc = code & 0x0F;
if (code2 == 0x15 || code2 == 0x05) if (tc == 0x05)
st->Read++; st->Read++;
else if (code2 == 0x16 || code2 == 0x06) else if (tc == 0x06)
st->Write++; st->Write++;
else if (tc == 0x08)
st->Invoke++;
// 超时指令也干掉
UInt64 end = Sys.Ms() - 5000;
for (int i = 0; i < ArrayLength(_Queue); i++) for (int i = 0; i < ArrayLength(_Queue); i++)
{ {
if (_Queue[i].Code == 0) auto& qi = _Queue[i];
if (qi.Code == 0 || qi.Time <= end)
{ {
_Queue[i].Code = code; qi.Code = code;
_Queue[i].Time = Sys.Ms(); qi.Time = Sys.Ms();
return true; return true;
} }
} }
@ -352,20 +360,21 @@ bool TokenController::StartSendStat(byte code)
bool TokenController::EndSendStat(byte code, bool success) bool TokenController::EndSendStat(byte code, bool success)
{ {
TS("TokenController::EndSendStat"); //TS("TokenController::EndSendStat");
auto st = Stat; auto st = Stat;
byte code2 = code & 0x3F; byte tc = code & 0x0F;
for (int i = 0; i < ArrayLength(_Queue); i++) for (int i = 0; i < ArrayLength(_Queue); i++)
{ {
if (_Queue[i].Code == code2) auto& qi = _Queue[i];
if (qi.Code == tc)
{ {
bool rs = false; bool rs = false;
if (success) if (success)
{ {
int cost = (int)(Sys.Ms() - _Queue[i].Time); int cost = (int)(Sys.Ms() - qi.Time);
// 莫名其妙,有时候竟然是负数 // 莫名其妙,有时候竟然是负数
if (cost < 0) cost = -cost; if (cost < 0) cost = -cost;
if (cost < 1000) if (cost < 1000)
@ -377,7 +386,7 @@ bool TokenController::EndSendStat(byte code, bool success)
} }
} }
_Queue[i].Code = 0; qi.Code = 0;
return rs; return rs;
} }
@ -385,10 +394,12 @@ bool TokenController::EndSendStat(byte code, bool success)
if ((code & 0x80) != 0) if ((code & 0x80) != 0)
{ {
if (code2 == 0x15 || code2 == 0x05) if (tc == 0x05)
st->ReadReply++; st->ReadReply++;
else if (code2 == 0x16 || code2 == 0x06) else if (tc == 0x06)
st->WriteReply++; st->WriteReply++;
else if (tc == 0x08)
st->InvokeReply++;
} }
return false; return false;
@ -487,6 +498,8 @@ void TokenStat::Clear()
_Last->ReadReply = ReadReply; _Last->ReadReply = ReadReply;
_Last->Write = Write; _Last->Write = Write;
_Last->WriteReply = WriteReply; _Last->WriteReply = WriteReply;
_Last->Invoke = Invoke;
_Last->InvokeReply = InvokeReply;
_Total->SendRequest += SendRequest; _Total->SendRequest += SendRequest;
_Total->RecvReply += RecvReply; _Total->RecvReply += RecvReply;
@ -498,19 +511,23 @@ void TokenStat::Clear()
_Total->ReadReply += ReadReply; _Total->ReadReply += ReadReply;
_Total->Write += Write; _Total->Write += Write;
_Total->WriteReply += WriteReply; _Total->WriteReply += WriteReply;
_Total->Invoke += Invoke;
_Total->InvokeReply += InvokeReply;
SendRequest = 0; SendRequest = 0;
RecvReply = 0; RecvReply = 0;
Time = 0; Time = 0;
SendReply = 0; SendReply = 0;
RecvRequest = 0; RecvRequest = 0;
RecvReplyAsync = 0; RecvReplyAsync = 0;
Read = 0; Read = 0;
ReadReply = 0; ReadReply = 0;
Write = 0; Write = 0;
WriteReply = 0; WriteReply = 0;
Invoke = 0;
InvokeReply = 0;
} }
String& TokenStat::ToStr(String& str) const String& TokenStat::ToStr(String& str) const
@ -523,8 +540,9 @@ String& TokenStat::ToStr(String& str) const
str = str + "发:" + Percent() + "% " + RecvReply + "/" + SendRequest + " " + Speed() + "ms"; str = str + "发:" + Percent() + "% " + RecvReply + "/" + SendRequest + " " + Speed() + "ms";
str = str + " 收:" + PercentReply() + "% " + SendReply + "/" + RecvRequest; str = str + " 收:" + PercentReply() + "% " + SendReply + "/" + RecvRequest;
if (RecvReplyAsync > 0) str = str + " 异步 " + RecvReplyAsync; if (RecvReplyAsync > 0) str = str + " 异步 " + RecvReplyAsync;
if (Read > 0) str = str + " 读:" + (ReadReply * 100 / Read) + " " + ReadReply + "/" + Read; if (Read > 0) str = str + " 读:" + (ReadReply * 100 / Read) + " " + ReadReply + "/" + Read;
if (Write > 0) str = str + " 写:" + (WriteReply * 100 / Write) + " " + WriteReply + "/" + Write; if (Write > 0) str = str + " 写:" + (WriteReply * 100 / Write) + " " + WriteReply + "/" + Write;
if (Write > 0) str = str + " 调:" + (InvokeReply * 100 / Invoke) + " " + InvokeReply + "/" + Invoke;
if (_Total) if (_Total)
{ {
str += ""; str += "";

View File

@ -50,7 +50,7 @@ private:
UInt64 Time; // 时间ms UInt64 Time; // 时间ms
}; };
QueueItem _Queue[16]; QueueItem _Queue[4];
bool StartSendStat(byte code); bool StartSendStat(byte code);
bool EndSendStat(byte code, bool success); bool EndSendStat(byte code, bool success);

View File

@ -28,7 +28,7 @@ bool TokenMessage::Read(Stream& ms)
if(ms.Remain() < MinSize) return false; if(ms.Remain() < MinSize) return false;
byte temp = ms.ReadByte(); byte temp = ms.ReadByte();
Code = temp & 0x3f; Code = temp & 0x0F;
Reply = temp >> 7; Reply = temp >> 7;
if(!Reply) if(!Reply)
OneWay = (temp >> 6) & 0x01; OneWay = (temp >> 6) & 0x01;