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