add csharp/dotnet devnull client to measure througput with different runtimes
This commit is contained in:
parent
74d3278258
commit
b15c4189f5
2
test/compatibility/csharp/.gitignore
vendored
Normal file
2
test/compatibility/csharp/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
bin
|
||||||
|
obj
|
99
test/compatibility/csharp/Main.cs
Normal file
99
test/compatibility/csharp/Main.cs
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
//
|
||||||
|
// Main.cs
|
||||||
|
// Author: Benjamin Sergeant
|
||||||
|
// Copyright (c) 2020 Machine Zone, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
// In a different terminal, start a push server:
|
||||||
|
// $ ws push_server -q
|
||||||
|
//
|
||||||
|
// $ dotnet run
|
||||||
|
// messages received per second: 145157
|
||||||
|
// messages received per second: 141405
|
||||||
|
// messages received per second: 152202
|
||||||
|
// messages received per second: 157149
|
||||||
|
// messages received per second: 157673
|
||||||
|
// messages received per second: 153594
|
||||||
|
// messages received per second: 157830
|
||||||
|
// messages received per second: 158422
|
||||||
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Net.WebSockets;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
public class DevNullClientCli
|
||||||
|
{
|
||||||
|
private static int receivedMessage = 0;
|
||||||
|
|
||||||
|
public static async Task<byte[]> ReceiveAsync(ClientWebSocket ws, CancellationToken token)
|
||||||
|
{
|
||||||
|
int bufferSize = 8192; // 8K
|
||||||
|
var buffer = new byte[bufferSize];
|
||||||
|
var offset = 0;
|
||||||
|
var free = buffer.Length;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
var result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer, offset, free), token).ConfigureAwait(false);
|
||||||
|
|
||||||
|
offset += result.Count;
|
||||||
|
free -= result.Count;
|
||||||
|
if (result.EndOfMessage) break;
|
||||||
|
|
||||||
|
if (free == 0)
|
||||||
|
{
|
||||||
|
// No free space
|
||||||
|
// Resize the outgoing buffer
|
||||||
|
var newSize = buffer.Length + bufferSize;
|
||||||
|
|
||||||
|
var newBuffer = new byte[newSize];
|
||||||
|
Array.Copy(buffer, 0, newBuffer, 0, offset);
|
||||||
|
buffer = newBuffer;
|
||||||
|
free = buffer.Length - offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void OnTimedEvent(object source, EventArgs e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"messages received per second: {receivedMessage}");
|
||||||
|
receivedMessage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task ReceiveMessagesAsync(string url)
|
||||||
|
{
|
||||||
|
var ws = new ClientWebSocket();
|
||||||
|
|
||||||
|
System.Uri uri = new System.Uri(url);
|
||||||
|
var cancellationToken = CancellationToken.None;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await ws.ConnectAsync(uri, cancellationToken).ConfigureAwait(false);
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
var data = await DevNullClientCli.ReceiveAsync(ws, cancellationToken);
|
||||||
|
receivedMessage += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (System.Net.WebSockets.WebSocketException e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"WebSocket error: {e}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task Main()
|
||||||
|
{
|
||||||
|
var timer = new System.Timers.Timer(1000);
|
||||||
|
timer.Elapsed += OnTimedEvent;
|
||||||
|
timer.Enabled = true;
|
||||||
|
timer.Start();
|
||||||
|
|
||||||
|
var url = "ws://localhost:8008";
|
||||||
|
await ReceiveMessagesAsync(url);
|
||||||
|
}
|
||||||
|
}
|
6
test/compatibility/csharp/devnull_client.csproj
Normal file
6
test/compatibility/csharp/devnull_client.csproj
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
Loading…
Reference in New Issue
Block a user