Improve client-side packet receiving

This commit is contained in:
sfan5 2019-11-19 20:23:00 +01:00
parent 154080c883
commit 0b2f0914cc
2 changed files with 16 additions and 20 deletions

@ -311,6 +311,7 @@ void Client::connect(Address address, bool is_local_server)
{ {
initLocalMapSaving(address, m_address_name, is_local_server); initLocalMapSaving(address, m_address_name, is_local_server);
// Since we use TryReceive() a timeout here would be ineffective anyway
m_con->SetTimeoutMs(0); m_con->SetTimeoutMs(0);
m_con->Connect(address); m_con->Connect(address);
} }
@ -795,36 +796,31 @@ void Client::initLocalMapSaving(const Address &address,
void Client::ReceiveAll() void Client::ReceiveAll()
{ {
NetworkPacket pkt;
u64 start_ms = porting::getTimeMs(); u64 start_ms = porting::getTimeMs();
for(;;) const u64 budget = 100;
{ for(;;) {
// Limit time even if there would be huge amounts of data to // Limit time even if there would be huge amounts of data to
// process // process
if(porting::getTimeMs() > start_ms + 100) if (porting::getTimeMs() > start_ms + budget) {
infostream << "Client::ReceiveAll(): "
"Packet processing budget exceeded." << std::endl;
break; break;
}
pkt.clear();
try { try {
Receive(); if (!m_con->TryReceive(&pkt))
g_profiler->graphAdd("client_received_packets", 1); break;
} ProcessData(&pkt);
catch(con::NoIncomingDataException &e) { } catch (const con::InvalidIncomingDataException &e) {
break; infostream << "Client::ReceiveAll(): "
}
catch(con::InvalidIncomingDataException &e) {
infostream<<"Client::ReceiveAll(): "
"InvalidIncomingDataException: what()=" "InvalidIncomingDataException: what()="
<<e.what()<<std::endl; << e.what() << std::endl;
} }
} }
} }
void Client::Receive()
{
NetworkPacket pkt;
m_con->Receive(&pkt);
ProcessData(&pkt);
}
inline void Client::handleCommand(NetworkPacket* pkt) inline void Client::handleCommand(NetworkPacket* pkt)
{ {
const ToClientCommandHandler& opHandle = toClientCommandTable[pkt->getCommand()]; const ToClientCommandHandler& opHandle = toClientCommandTable[pkt->getCommand()];
@ -841,6 +837,7 @@ void Client::ProcessData(NetworkPacket *pkt)
//infostream<<"Client: received command="<<command<<std::endl; //infostream<<"Client: received command="<<command<<std::endl;
m_packetcounter.add((u16)command); m_packetcounter.add((u16)command);
g_profiler->graphAdd("client_received_packets", 1);
/* /*
If this check is removed, be sure to change the queue If this check is removed, be sure to change the queue

@ -453,7 +453,6 @@ private:
bool is_local_server); bool is_local_server);
void ReceiveAll(); void ReceiveAll();
void Receive();
void sendPlayerPos(); void sendPlayerPos();