1
0
mirror of https://github.com/lidgren/lidgren-network-gen3.git synced 2026-05-16 15:16:33 +09:00

AutoExpandMTU disabled per default; minor tweaks to resends

This commit is contained in:
lidgren
2010-12-22 11:56:10 +00:00
parent 6989fbda61
commit 43b40f8a10
7 changed files with 42 additions and 19 deletions

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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);
}
}
}