优化令牌统计

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

View File

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

View File

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