You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-16 07:06:30 +09:00
AutoExpandMTU disabled per default; minor tweaks to resends
This commit is contained in:
@@ -88,7 +88,7 @@ namespace Lidgren.Network
|
||||
if (m_averageRoundtripTime < 0)
|
||||
{
|
||||
m_remoteTimeOffset = diff;
|
||||
m_averageRoundtripTime = rtt; // initial estimate
|
||||
m_averageRoundtripTime = rtt * 1.15f; // initially over-estimate
|
||||
m_peer.LogDebug("Initiated average roundtrip time to " + NetTime.ToReadable(m_averageRoundtripTime) + " Server time is: " + (now + diff));
|
||||
}
|
||||
else
|
||||
|
||||
@@ -127,7 +127,6 @@ namespace Lidgren.Network
|
||||
m_lastSentMTUAttemptSize = size;
|
||||
m_lastSentMTUAttemptTime = now;
|
||||
|
||||
//m_peer.LogDebug("Requesting MTU expand " + size + " bytes");
|
||||
m_statistics.PacketSent(len, 1);
|
||||
}
|
||||
|
||||
@@ -137,7 +136,8 @@ namespace Lidgren.Network
|
||||
return;
|
||||
m_expandMTUStatus = ExpandMTUStatus.Finished;
|
||||
m_currentMTU = size;
|
||||
m_peer.LogVerbose("Maximum Transmission Unit set to: " + m_currentMTU + " bytes");
|
||||
if (m_currentMTU != m_peerConfiguration.m_maximumTransmissionUnit)
|
||||
m_peer.LogDebug("Expanded Maximum Transmission Unit to: " + m_currentMTU + " bytes");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace Lidgren.Network
|
||||
float avgRtt = m_averageRoundtripTime;
|
||||
if (avgRtt <= 0)
|
||||
avgRtt = 0.1f; // "default" resend is based on 100 ms roundtrip time
|
||||
return 0.01f + (avgRtt * 2); // 10 ms + double rtt
|
||||
return 0.02f + (avgRtt * 2.0f); // 20 ms + double rtt
|
||||
}
|
||||
|
||||
internal NetConnection(NetPeer peer, IPEndPoint remoteEndpoint)
|
||||
|
||||
@@ -23,6 +23,12 @@ using System.Diagnostics;
|
||||
|
||||
namespace Lidgren.Network
|
||||
{
|
||||
internal enum MessageResendReason
|
||||
{
|
||||
Delay,
|
||||
HoleInSequence
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Statistics for a NetConnection instance
|
||||
/// </summary>
|
||||
@@ -39,7 +45,8 @@ namespace Lidgren.Network
|
||||
internal int m_sentBytes;
|
||||
internal int m_receivedBytes;
|
||||
|
||||
internal int m_resentMessages;
|
||||
internal int m_resentMessagesDueToDelay;
|
||||
internal int m_resentMessagesDueToHole;
|
||||
|
||||
internal NetConnectionStatistics(NetConnection conn)
|
||||
{
|
||||
@@ -78,7 +85,7 @@ namespace Lidgren.Network
|
||||
/// <summary>
|
||||
/// Gets the number of resent reliable messages for this connection
|
||||
/// </summary>
|
||||
public int ResentMessages { get { return m_resentMessages; } }
|
||||
public int ResentMessages { get { return m_resentMessagesDueToHole + m_resentMessagesDueToDelay; } }
|
||||
|
||||
// public double LastSendRespondedTo { get { return m_connection.m_lastSendRespondedTo; } }
|
||||
|
||||
@@ -101,9 +108,12 @@ namespace Lidgren.Network
|
||||
}
|
||||
|
||||
[Conditional("DEBUG")]
|
||||
internal void MessageResent()
|
||||
internal void MessageResent(MessageResendReason reason)
|
||||
{
|
||||
m_resentMessages++;
|
||||
if (reason == MessageResendReason.Delay)
|
||||
m_resentMessagesDueToDelay++;
|
||||
else
|
||||
m_resentMessagesDueToHole++;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -116,8 +126,10 @@ namespace Lidgren.Network
|
||||
bdr.AppendLine("Sent " + m_sentBytes + " bytes in " + m_sentMessages + " messages in " + m_sentPackets + " packets");
|
||||
bdr.AppendLine("Received " + m_receivedBytes + " bytes in " + m_receivedMessages + " messages in " + m_receivedPackets + " packets");
|
||||
|
||||
if (m_resentMessages > 0)
|
||||
bdr.AppendLine("Resent messages: " + m_resentMessages);
|
||||
if (m_resentMessagesDueToDelay > 0)
|
||||
bdr.AppendLine("Resent messages (delay): " + m_resentMessagesDueToDelay);
|
||||
if (m_resentMessagesDueToDelay > 0)
|
||||
bdr.AppendLine("Resent messages (holes): " + m_resentMessagesDueToHole);
|
||||
|
||||
int numUnsent = 0;
|
||||
int numStored = 0;
|
||||
|
||||
@@ -95,7 +95,10 @@ namespace Lidgren.Network
|
||||
}
|
||||
NetSendResult res = conn.EnqueueMessage(msg, method, sequenceChannel);
|
||||
if (res == NetSendResult.Dropped)
|
||||
{
|
||||
LogDebug(msg + " dropped immediately due to full queues");
|
||||
Interlocked.Decrement(ref msg.m_recyclingCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -89,7 +89,7 @@ namespace Lidgren.Network
|
||||
// Total 1408 bytes
|
||||
// Note that lidgren headers (5 bytes) are not included here; since it's part of the "mtu payload"
|
||||
m_maximumTransmissionUnit = 1408;
|
||||
m_autoExpandMTU = true;
|
||||
m_autoExpandMTU = false;
|
||||
m_expandMTUFrequency = 2.0f;
|
||||
m_expandMTUFailAttempts = 5;
|
||||
|
||||
|
||||
@@ -86,8 +86,8 @@ namespace Lidgren.Network
|
||||
seqNr--;
|
||||
}
|
||||
|
||||
m_connection.m_peer.LogVerbose("Resending due to delay #" + seqNr + " " + om.ToString());
|
||||
m_connection.m_statistics.MessageResent();
|
||||
//m_connection.m_peer.LogVerbose("Resending due to delay #" + seqNr + " " + om.ToString());
|
||||
m_connection.m_statistics.MessageResent(MessageResendReason.Delay);
|
||||
|
||||
m_connection.QueueSendMessage(om, seqNr);
|
||||
|
||||
@@ -165,7 +165,7 @@ namespace Lidgren.Network
|
||||
m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;
|
||||
|
||||
// advance window if we already have early acks
|
||||
while (m_receivedAcks[m_windowStart])
|
||||
while (m_receivedAcks.Get(m_windowStart))
|
||||
{
|
||||
//m_connection.m_peer.LogDebug("Using early ack for #" + m_windowStart + "...");
|
||||
m_receivedAcks[m_windowStart] = false;
|
||||
@@ -226,11 +226,19 @@ namespace Lidgren.Network
|
||||
{
|
||||
// just sent once; resend immediately since we found gap in ack sequence
|
||||
NetOutgoingMessage rmsg = m_storedMessages[slot].Message;
|
||||
m_connection.m_peer.LogVerbose("Resending #" + rnr + " (" + rmsg + ")");
|
||||
m_storedMessages[slot].LastSent = now;
|
||||
m_storedMessages[slot].NumSent++;
|
||||
m_connection.m_statistics.MessageResent();
|
||||
m_connection.QueueSendMessage(rmsg, rnr);
|
||||
//m_connection.m_peer.LogVerbose("Resending #" + rnr + " (" + rmsg + ")");
|
||||
|
||||
if (now - m_storedMessages[slot].LastSent < (m_resendDelay * 0.35f))
|
||||
{
|
||||
// already resent recently
|
||||
}
|
||||
else
|
||||
{
|
||||
m_storedMessages[slot].LastSent = now;
|
||||
m_storedMessages[slot].NumSent++;
|
||||
m_connection.m_statistics.MessageResent(MessageResendReason.HoleInSequence);
|
||||
m_connection.QueueSendMessage(rmsg, rnr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user