Skip to content

Commit 81eb45f

Browse files
committed
Disable Nagle algorithm for reduced latency
1 parent eb06dbb commit 81eb45f

2 files changed

Lines changed: 19 additions & 9 deletions

File tree

SerializersBenchmark/Network/Abstractions/TcpServer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public void Start()
2121
while (true)
2222
{
2323
_connectedClient = await _tcpListener.AcceptTcpClientAsync();
24+
_connectedClient.Client.NoDelay = true;//disable Nagle's algorithm for low latency
2425
await OnClientConnected(_connectedClient);
2526
}
2627
}

SerializersBenchmark/Network/Rabbit.cs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,37 @@
44

55
namespace SerializersBenchmark.Network;
66

7-
public sealed class Rabbit(ISerializerTestAsync serializer, int port, bool useBufferedStream = false) : IRabbit, ITcpClient
7+
public sealed class Rabbit : IRabbit, ITcpClient
88
{
9-
private readonly TcpClient _tcpClient = new();
9+
private readonly TcpClient _tcpClient;
1010
private NetworkStream _networkStream;
11+
private readonly ISerializerTestAsync _serializer;
12+
private readonly int _port;
13+
private readonly bool _useBufferedStream;
14+
public Rabbit(ISerializerTestAsync serializer, int port, bool useBufferedStream = false) {
15+
_serializer = serializer;
16+
_port = port;
17+
_useBufferedStream = useBufferedStream;
18+
_tcpClient = new TcpClient();
19+
_tcpClient.Client.NoDelay = true; //disable Nagle's algorithm for low latency
20+
}
1121

12-
public async Task ConnectAsync()
13-
{
14-
await _tcpClient.ConnectAsync("127.0.0.1", port);
22+
public async Task ConnectAsync() {
23+
await _tcpClient.ConnectAsync("127.0.0.1", _port);
1524
_networkStream = _tcpClient.GetStream();
1625
}
1726

1827
public async Task SendAsync(object value, int repeatCount)
1928
{
2029
Stream stream = _networkStream;
21-
if (useBufferedStream)
30+
if (_useBufferedStream)
2231
{
2332
stream = new BufferedStream(stream);
2433
}
2534

2635
for (var i = 0; i < repeatCount; i++)
2736
{
28-
await serializer.SerializeAsync(value, stream).ConfigureAwait(false);
37+
await _serializer.SerializeAsync(value, stream).ConfigureAwait(false);
2938
}
3039

3140
await _networkStream.FlushAsync().ConfigureAwait(false);
@@ -34,11 +43,11 @@ public async Task SendAsync(object value, int repeatCount)
3443
public async Task<object> ReceiveAsync(int expectedSize)
3544
{
3645
Stream stream = new LimitedStreamReader(_networkStream, expectedSize);
37-
if (useBufferedStream)
46+
if (_useBufferedStream)
3847
{
3948
stream = new BufferedStream(stream);
4049
}
41-
return await serializer.DeserializeAsync(stream).ConfigureAwait(false);
50+
return await _serializer.DeserializeAsync(stream).ConfigureAwait(false);
4251
}
4352

4453
public void Dispose()

0 commit comments

Comments
 (0)