mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-11 04:17:48 +00:00
NetworkSession: fixed rate limit not being increased correctly on Windows
due to the 15ms scheduler interval, the server will often sleep 45ms instead of 50ms, which causes the budget not to get updated.
This commit is contained in:
parent
bb3f87f862
commit
992cb06da6
@ -159,6 +159,7 @@ class NetworkSession{
|
|||||||
* @see self::INCOMING_PACKET_BATCH_MAX_BUDGET
|
* @see self::INCOMING_PACKET_BATCH_MAX_BUDGET
|
||||||
*/
|
*/
|
||||||
private int $incomingPacketBatchBudget = self::INCOMING_PACKET_BATCH_MAX_BUDGET;
|
private int $incomingPacketBatchBudget = self::INCOMING_PACKET_BATCH_MAX_BUDGET;
|
||||||
|
private int $lastPacketBudgetUpdateTimeNs;
|
||||||
|
|
||||||
private \PrefixedLogger $logger;
|
private \PrefixedLogger $logger;
|
||||||
private ?Player $player = null;
|
private ?Player $player = null;
|
||||||
@ -197,8 +198,6 @@ class NetworkSession{
|
|||||||
*/
|
*/
|
||||||
private ObjectSet $disposeHooks;
|
private ObjectSet $disposeHooks;
|
||||||
|
|
||||||
private int $lastUpdateTimeNs;
|
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private Server $server,
|
private Server $server,
|
||||||
private NetworkSessionManager $manager,
|
private NetworkSessionManager $manager,
|
||||||
@ -219,7 +218,7 @@ class NetworkSession{
|
|||||||
$this->disposeHooks = new ObjectSet();
|
$this->disposeHooks = new ObjectSet();
|
||||||
|
|
||||||
$this->connectTime = time();
|
$this->connectTime = time();
|
||||||
$this->lastUpdateTimeNs = hrtime(true);
|
$this->lastPacketBudgetUpdateTimeNs = hrtime(true);
|
||||||
|
|
||||||
$this->setHandler(new SessionStartPacketHandler(
|
$this->setHandler(new SessionStartPacketHandler(
|
||||||
$this->server,
|
$this->server,
|
||||||
@ -1140,10 +1139,6 @@ class NetworkSession{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function tick() : void{
|
public function tick() : void{
|
||||||
$nowNs = hrtime(true);
|
|
||||||
$timeSinceLastUpdateNs = $nowNs - $this->lastUpdateTimeNs;
|
|
||||||
$this->lastUpdateTimeNs = $nowNs;
|
|
||||||
|
|
||||||
if($this->info === null){
|
if($this->info === null){
|
||||||
if(time() >= $this->connectTime + 10){
|
if(time() >= $this->connectTime + 10){
|
||||||
$this->disconnect("Login timeout");
|
$this->disconnect("Login timeout");
|
||||||
@ -1165,15 +1160,16 @@ class NetworkSession{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->flushSendBuffer();
|
$this->flushSendBuffer();
|
||||||
$ticksSinceLastUpdate = intdiv($timeSinceLastUpdateNs, 50_000_000);
|
|
||||||
if($ticksSinceLastUpdate > 0){
|
$nowNs = hrtime(true);
|
||||||
if($ticksSinceLastUpdate > 1){
|
$timeSinceLastUpdateNs = $nowNs - $this->lastPacketBudgetUpdateTimeNs;
|
||||||
$this->logger->debug("Adding packet budget for $ticksSinceLastUpdate ticks (current budget is $this->incomingPacketBatchBudget)");
|
if($timeSinceLastUpdateNs > 50_000_000){
|
||||||
}
|
$ticksSinceLastUpdate = intdiv($timeSinceLastUpdateNs, 50_000_000);
|
||||||
$this->incomingPacketBatchBudget = min(
|
$this->incomingPacketBatchBudget = min(
|
||||||
$this->incomingPacketBatchBudget + (self::INCOMING_PACKET_BATCH_PER_TICK * 2 * $ticksSinceLastUpdate),
|
$this->incomingPacketBatchBudget + (self::INCOMING_PACKET_BATCH_PER_TICK * 2 * $ticksSinceLastUpdate),
|
||||||
self::INCOMING_PACKET_BATCH_MAX_BUDGET
|
self::INCOMING_PACKET_BATCH_MAX_BUDGET
|
||||||
);
|
);
|
||||||
|
$this->lastPacketBudgetUpdateTimeNs = $nowNs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user