Skip to content

Commit

Permalink
1、性能优化, 减少网络copy, 2、log没有初始化时,屏幕打印缺少换行
Browse files Browse the repository at this point in the history
  • Loading branch information
laiyongcong committed May 17, 2024
1 parent 32e2bd2 commit ffaf6d7
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 11 deletions.
2 changes: 1 addition & 1 deletion Log/Log.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ void Log::WriteLog(ELogLevel eLogLevel, const char* szFormat, ...) {
localtime_r(&tNow, &tmNow);
safe_printf(szLogPrefix, sizeof(szLogPrefix), "%s %04d-%02d-%02d %02d:%02d:%02d.%03d %d-%s", GetLogDesc(logItem.mLogLevel), tmNow.tm_year + 1900, tmNow.tm_mon + 1, tmNow.tm_mday, tmNow.tm_hour,
tmNow.tm_min, tmNow.tm_sec, (int)(logItem.mLogTime.tv_usec / 1000), Utils::GetProcessID(), logItem.mThreadName.c_str());
fprintf(stderr, "%s %s", szLogPrefix, szBuff);
fprintf(stderr, "%s %s\n", szLogPrefix, szBuff);
}
}

Expand Down
15 changes: 6 additions & 9 deletions Network/TcpNet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,15 +308,13 @@ class NetThread : public Thread {
LOG_ERROR("%s invalid bodylen:%u", pConn->Info().c_str(), uBodyLen);
return false;
}
pPack.reset(new PackImp(uBodyLen + mHeaderSize, mEngine->mDecoder));
::memcpy(pPack->mBuff, pHeader->mBuff, mHeaderSize);
pPack->mRWOffset = uHeaderOffset;
pPack.reset(new PackImp(uBodyLen, mEngine->mDecoder));
}
}

char* pPackBuff = pPack->mBuff;
uint32_t& uOffset = pPack->mRWOffset;
uint32_t uDataLen = pPack->GetDataLen();
uint32_t uDataLen = mEngine->mDecoder->GetBodyLen(pHeaderBuf);
while (uOffset < uDataLen) {
int nNeedRead = (int)(uDataLen - uOffset);
int nRecv = ::recv(pConn->mSock, pPackBuff + uOffset, nNeedRead, 0);
Expand All @@ -338,7 +336,7 @@ class NetThread : public Thread {
}

pHeader->mRWOffset = 0;
nErrCode = mEngine->OnRecvMsg(pConn, pPack.get());
nErrCode = mEngine->OnRecvMsg(pConn, pHeaderBuf, pPackBuff, uDataLen);
pPack.reset();
if (nErrCode != 0) pConn->Kick("Pack execute ret:" + std::to_string(nErrCode));
}
Expand Down Expand Up @@ -505,15 +503,14 @@ void TcpEngine::OnConnecterClose(std::shared_ptr<Connecter> pConn, const String&
LOG_TRACE("%s disconect, msg:%s", pConn->Info().c_str(), szErrMsg.c_str());
}

int TcpEngine::OnRecvMsg(Connecter* pConn, Pack* pPack) {
const char* pBuff = pPack->GetBuff();
const String& strCmd = mDecoder->GetCmd(pBuff);
int TcpEngine::OnRecvMsg(Connecter* pConn, const char* szHeaderBuff, const char* szBodybuff, uint32_t uBodyLen) {
const String& strCmd = mDecoder->GetCmd(szHeaderBuff);
const StaticMethod* pMethod = mMsgClass->GetStaticMethod(strCmd.c_str());
if (pMethod == nullptr) {
LOG_FATAL("unknow msg:%s", strCmd.c_str());
return -1;
}
return pMethod->Invoke<int, Connecter*, const char*, uint32_t>(pConn, pBuff + mHeaderSize, pPack->GetDataLen() - mHeaderSize);
return pMethod->Invoke<int, Connecter*, const char*, uint32_t>(pConn, szBodybuff, uBodyLen);
}


Expand Down
2 changes: 1 addition & 1 deletion Network/TcpNet.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class TcpEngine : public NonCopyable {
public:
virtual void OnConnecterCreate(Connecter* pConn); // 被网络线程调用,
virtual void OnConnecterClose(std::shared_ptr<Connecter> pConn, const String& szErrMsg); // 被网络线程调用,
virtual int OnRecvMsg(Connecter* pConn, Pack* pPack); // 被网络线程调用
virtual int OnRecvMsg(Connecter* pConn, const char* szHeaderBuff, const char* szBodybuff, uint32_t uBodyLen); // 被网络线程调用
// 若用户继承并扩展了connecter,需要override此函数, 若想用内存池的方式管理链接,需要自行修改connecter的分配和回收,需要注意线程安全
virtual Connecter* AllocateConnecter() { return new (std::nothrow) Connecter; }
private:
Expand Down

0 comments on commit ffaf6d7

Please sign in to comment.