Works, but slow for many connections

This commit is contained in:
2025-07-27 00:14:15 +03:00
parent be12f1da65
commit bb3c4887df
24 changed files with 209 additions and 130 deletions
+54 -44
View File
@@ -35,65 +35,75 @@ File.AppendAllText("results.txt", $"[SINGLE CBOR WRITER ALLOC] {totalRequests}\r
async Task<List<ILoadTest>> GetLoadEndpoints(int count)
{
var loads = new List<ILoadTest>();
for (int i = 0; i < count; i++)
try
{
var builder = Host.CreateApplicationBuilder(new HostApplicationBuilderSettings { DisableDefaults = true });
builder.Services.AddSingleton<IContextualSerializationToolKit, CborSerializationToolkit>();
builder.Services.AddSingleton<IEndPointContext, EndPointContext>();
builder.Services.AddSingleton<IRealStoreInstanceRepository, InstanceRepository>(provider =>
var loads = new List<ILoadTest>();
for (int i = 0; i < count; i++)
{
var repo = new InstanceRepository(provider.GetService<IRepresentationModuleProducer>());
repo.FillSingletons(typeof(Program).Assembly);
return repo;
});
Console.WriteLine($"Initializing {i}");
var builder = Host.CreateApplicationBuilder(new HostApplicationBuilderSettings { DisableDefaults = true });
builder.Services.AddSingleton<IContextualSerializationToolKit, CborSerializationToolkit>();
builder.Services.AddSingleton<IEndPointContext, EndPointContext>();
builder.Services.AddSingleton<IRealStoreInstanceRepository, InstanceRepository>(provider =>
{
var repo = new InstanceRepository(provider.GetService<IRepresentationModuleProducer>());
repo.FillSingletons(typeof(Program).Assembly);
return repo;
});
builder.Services.AddSingleton<IInstanceRepository, RemoteInstanceRepository>();
builder.Services.AddSingleton<IChannelInteractionModule, ChannelInteractionModule>();
// builder.Services.AddSingleton<IUntrustedInteractionModule, UdpUntrustedInteraction>();
builder.Services.AddSingleton<IRepresentationModule, RepresentationModule>();
var serverEndPoint = new IPEndPoint(IPAddress.Loopback, 4567);
builder.Services.AddSingleton<IFrontendBridge, NetworkFrontendBridge>();
builder.Services.AddOptions();
builder.Services.Configure<GatewayOptions>(options => options.Endpoint = serverEndPoint);
builder.Services.AddSingleton<IRepresentationModuleProducer, StaticRepresentationModuleProducer>();
// builder.Services.AddSingleton<IRequestExtractor, RequestExtractor>();
builder.Services.AddSingleton<IExecuteModule, BasicExecutionModule>();
builder.Services.AddSingleton<IInstanceRepository, RemoteInstanceRepository>();
builder.Services.AddSingleton<IChannelInteractionModule, ChannelInteractionModule>();
// builder.Services.AddSingleton<IUntrustedInteractionModule, UdpUntrustedInteraction>();
builder.Services.AddSingleton<IRepresentationModule, RepresentationModule>();
var serverEndPoint = new IPEndPoint(IPAddress.Loopback, 4567);
builder.Services.AddSingleton<IFrontendBridge, NetworkFrontendBridge>();
builder.Services.AddOptions();
builder.Services.Configure<GatewayOptions>(options => options.Endpoint = serverEndPoint);
builder.Services.AddSingleton<IRepresentationModuleProducer, StaticRepresentationModuleProducer>();
// builder.Services.AddSingleton<IRequestExtractor, RequestExtractor>();
builder.Services.AddSingleton<IExecuteModule, BasicExecutionModule>();
builder.Services.AddSingleton<IMethodRepository, CollectableMethodRepository>(p =>
{
var methodRepo = new CollectableMethodRepository();
methodRepo.AppendInvokers(new GeneratedInvokersCollection());
return methodRepo;
});
builder.Services.AddSingleton<ICallIndexProvider, GeneratedCallIndexProvider>();
builder.Services.AddSingleton<ICancellationRepository, CancellationRepository>();
builder.Services.AddSingleton<IMethodRepository, CollectableMethodRepository>(p =>
{
var methodRepo = new CollectableMethodRepository();
methodRepo.AppendInvokers(new GeneratedInvokersCollection());
return methodRepo;
});
builder.Services.AddSingleton<ICallIndexProvider, GeneratedCallIndexProvider>();
builder.Services.AddSingleton<ICancellationRepository, CancellationRepository>();
var app = builder.Build();
var app = builder.Build();
var frontendBridge = app.Services.GetService<IFrontendBridge>()!;
await frontendBridge.Connect();
// _ = app.Services.GetService<IRequestExtractor>()!.StartExtraction();
// _ = app.Services.GetService<IUntrustedInteractionModule>().Start(serverEndPoint);
var context = app.Services.GetService<IInstanceRepository>();
Console.WriteLine($"Connecting {i}");
var frontendBridge = app.Services.GetService<IFrontendBridge>()!;
await frontendBridge.Connect();
// _ = app.Services.GetService<IRequestExtractor>()!.StartExtraction();
// _ = app.Services.GetService<IUntrustedInteractionModule>().Start(serverEndPoint);
var context = app.Services.GetService<IInstanceRepository>();
Console.WriteLine($"Connected {i}");
var singletonObject =
context.GetSingletonObject<ILoadTest>(
app.Services.GetService<IEndPointContext>());
loads.Add(singletonObject);
}
var singletonObject =
context.GetSingletonObject<ILoadTest>(
app.Services.GetService<IEndPointContext>());
loads.Add(singletonObject);
return loads;
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
return loads;
}
async Task<int> Requests(CancellationToken token, int id, ILoadTest load)
{
try
{
int count = 0;
while (true){
while (true)
{
if (token.IsCancellationRequested)
{
break;
@@ -101,7 +111,7 @@ async Task<int> Requests(CancellationToken token, int id, ILoadTest load)
await load.Next(2);
count++;
}
}
Console.WriteLine(id);
return count;