diff --git a/MLAPI/Data/NetworkingConfiguration.cs b/MLAPI/Data/NetworkingConfiguration.cs index 99209cf..fe969cb 100644 --- a/MLAPI/Data/NetworkingConfiguration.cs +++ b/MLAPI/Data/NetworkingConfiguration.cs @@ -16,6 +16,7 @@ namespace MLAPI public List RegisteredScenes = new List(); public int MessageBufferSize = 65535; public int ReceiveTickrate = 64; + public int MaxReceiveEventsPerTickRate = 500; public int SendTickrate = 64; public int EventTickrate = 64; public int MaxConnections = 100; diff --git a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs index 32af8f6..95e1f51 100644 --- a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs +++ b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs @@ -312,8 +312,10 @@ namespace MLAPI if((Time.time - lastReceiveTickTime >= (1f / NetworkConfig.ReceiveTickrate)) || NetworkConfig.ReceiveTickrate <= 0) { NetworkEventType eventType; + int processedEvents = 0; do { + processedEvents++; eventType = NetworkTransport.Receive(out hostId, out clientId, out channelId, messageBuffer, messageBuffer.Length, out receivedSize, out error); NetworkError networkError = (NetworkError)error; if (networkError == NetworkError.Timeout) @@ -368,7 +370,8 @@ namespace MLAPI OnClientDisconnect(clientId); break; } - } while (eventType != NetworkEventType.Nothing); + // Only do another iteration if: there are no more messages AND (there is no limit to max events or we have processed less than the maximum) + } while (eventType != NetworkEventType.Nothing && (NetworkConfig.MaxReceiveEventsPerTickRate <= 0 || processedEvents < NetworkConfig.MaxReceiveEventsPerTickRate)); lastReceiveTickTime = Time.time; } if (isServer && ((Time.time - lastEventTickTime >= (1f / NetworkConfig.EventTickrate)) || NetworkConfig.EventTickrate <= 0))