public static Task Main(string[] args) { var parsedArgs = Args.Parse(args); if (parsedArgs.Benchmark) { BenchmarkInHarness(parsedArgs); return(Task.CompletedTask); } IServerApplication app = null; if (parsedArgs.Mode == Mode.Raw) { app = new PlainTextRawApplication(); } else if (parsedArgs.Mode == Mode.Features) { app = new PlainTextApplication(); } else if (parsedArgs.Mode == Mode.RawWithHeaders) { app = new PlainTextRawWithHeadersApplication(); } else { app = new HttpServer <BenchmarkHandler>(); } var lifetime = new ApplicationLifetime(NullLoggerFactory.Instance.CreateLogger <ApplicationLifetime>()); var binding = new IPEndPointInformation(new IPEndPoint(IPAddress.Any, parsedArgs.Port)); var transportFactory = CreateTransport(parsedArgs, lifetime); return(app.RunAsync(transportFactory, binding, lifetime)); }
public async Task RunAsync(int port, int threadCount) { var lifetime = new ApplicationLifetime(NullLoggerFactory.Instance.CreateLogger <ApplicationLifetime>()); Console.CancelKeyPress += (sender, e) => lifetime.StopApplication(); var libuvOptions = new LibuvTransportOptions { ThreadCount = threadCount }; var libuvTransport = new LibuvTransportFactory( Options.Create(libuvOptions), lifetime, NullLoggerFactory.Instance); var binding = new IPEndPointInformation(new System.Net.IPEndPoint(System.Net.IPAddress.Any, port)); var transport = libuvTransport.Create(binding, this); await transport.BindAsync(); Console.WriteLine($"Server (raw with headers) listening on http://*:{port} with {libuvOptions.ThreadCount} thread(s)"); lifetime.ApplicationStopping.WaitHandle.WaitOne(); await transport.UnbindAsync(); await transport.StopAsync(); }