-
-
Notifications
You must be signed in to change notification settings - Fork 744
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Network RTT calculation significantly inaccurate after ServerChangeScene #3576
Comments
Need to reset RTT after scene loading. |
great bug report @Mr-Oregano , I can reproduce it: |
okay so the above repro is not valid because it sleeps after the scene was loaded. however, this is more fitting repro for the issue: public virtual void ServerChangeScene(string newSceneName)
{
if (string.IsNullOrWhiteSpace(newSceneName))
{
Debug.LogError("ServerChangeScene empty scene name");
return;
}
if (NetworkServer.isLoadingScene && newSceneName == networkSceneName)
{
Debug.LogError($"Scene change is already in progress for {newSceneName}");
return;
}
// Debug.Log($"ServerChangeScene {newSceneName}");
NetworkServer.SetAllClientsNotReady();
networkSceneName = newSceneName;
// Let server prepare for scene change
OnServerChangeScene(newSceneName);
// set server flag to stop processing messages while changing scenes
// it will be re-enabled in FinishLoadScene.
NetworkServer.isLoadingScene = true;
loadingSceneAsync = SceneManager.LoadSceneAsync(newSceneName);
// ARTIFICIAL DELAY
Thread.Sleep(5000);
// ServerChangeScene can be called when stopping the server
// when this happens the server is not active so does not need to tell clients about the change
if (NetworkServer.active)
{
// notify all clients about the new scene
NetworkServer.SendToAll(new SceneMessage
{
sceneName = newSceneName
});
}
startPositionIndex = 0;
startPositions.Clear();
} this is a better repro, so the client doesn't immediately enter the scene either. |
client is still receiving about 50 messages from the previous scene with the previous old time. |
…sages before a (potentially long) scene load. fixes a bug where RTT would be very high after a long scene load.
fix is ready, see PR linked above |
…sages before a (potentially long) scene load. fixes a bug where RTT would be very high after a long scene load.
…sages before a (potentially long) scene load. fixes a bug where RTT would be very high after a long scene load. (#3650) * fix: #3576 Pings are now stamped with a scene hash so we can drop messages before a (potentially long) scene load. fixes a bug where RTT would be very high after a long scene load. * 16 bit hash fakebyte
reopening, had to revert the original fix since it breaks tanks/billiards demos with latency sim. |
Describe the bug
The Network RTT calculation becomes highly inaccurate after an online scene is loaded with
ServerChangeScene
. This is due to all messages being blocked by server and client whenever a scene is being loaded. If the scene takes a long time to load, EMA forNetworkTime.cs
will be thrown off.How can we reproduce the issue, step by step:
OfflineScene
, addNetworkPingDisplay
component to theNetworkRoomManager
game object.-> Since the example room scene is simple, it loads really fast, so we need to artificially create a loading delay.
NetworkRoomManagerExt.OnGUI()
I added...Expected behavior
Ideally,
NetworkPingMessage
should still go through while loading a scene so that server/client RTT calculation always stays as accurate as possible.Screenshots
Desktop:
v2021.3.8f1
Additional context
After a while, the RTT will settle back down to a more accurate number, usually this takes a few seconds to happen.
The text was updated successfully, but these errors were encountered: