123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- using CompServ.Worker;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Server.Kestrel.Core;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Hosting;
- using Microsoft.Extensions.Logging;
- using Microsoft.Extensions.Logging.Console;
- using System;
- using CompServ.ClientLibrary;
- using Microsoft.AspNetCore.Hosting.Server.Features;
- using Microsoft.AspNetCore.Hosting.Server;
- using Microsoft.AspNetCore.Http.Features;
- if (args.Length > 0)
- {
- StatusHolder.HubServer = args[0];
- if (args.Length > 1 && int.TryParse(args[1], out var ratioArg) && ratioArg > 1) StatusHolder.Ratio = ratioArg;
- }
- var builder = WebApplication.CreateBuilder(args);
- //控制台日志格式
- builder.Services.AddLogging(opt =>
- {
- opt.AddSimpleConsole(p =>
- {
- p.TimestampFormat = "[dd HH:mm:ss] ";
- p.SingleLine = true;
- p.ColorBehavior = LoggerColorBehavior.Enabled;
- });
- });
- builder.Services.Configure<LoggerFilterOptions>(options =>
- {
- options.AddFilter((category, level) =>
- {
- if (level == LogLevel.Debug) return false;
- if (level == LogLevel.Trace) return false;
- if (category == "Microsoft.AspNetCore.Hosting.Diagnostics" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Routing.EndpointMiddleware" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Server.Kestrel" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Server.Kestrel.Http2" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor" && level == LogLevel.Information) return false;
- return true; // 其他日志保留
- });
- });
- //配置HTTP1、HTTP2端口
- builder.WebHost.UseKestrel((_, kso) =>
- {
- kso.ListenAnyIP(0, lo => lo.Protocols = HttpProtocols.Http2);
- kso.ListenAnyIP(0, lo => lo.Protocols = HttpProtocols.Http1);
- });
- builder.Services.Configure<KestrelServerOptions>(options =>
- {
- options.Limits.MaxRequestBodySize = 100 * 1024 * 1024; // 设置最大请求体大小 100MB
- });
- try
- {
- Console.Title = "...";
- builder.Services.AddHostedService<ConsoleTitleUpdateService>();
- }
- catch
- {
- //EAT ERR
- }
- if (StatusHolder.HubServer != null) builder.Services.AddSingleton<HubRegister>();
- builder.Services.AddControllers();
- var app = builder.Build();
- app.Use(async (context, next) =>
- {
- context.Request.EnableBuffering(); // this used to be EnableRewind
- await next(context);
- });
- app.MapControllers();
- app.MapGet("/", () => "I am worker!");
- await app.StartAsync();
- // ↑↓ await app.RunAsync();
- {
- var logger = app.Services.GetRequiredService<ILogger<Program>>();
- logger.LogInformation("Self check...");
- var svr = app.Services.GetRequiredService<IServer>();
- var saf = svr.Features.GetRequiredFeature<IServerAddressesFeature>();
- var listeningPort = new Uri(saf.Addresses.First()).Port;
- var client = new CompServWorkerClient("http://localhost:" + listeningPort);
- var r = await client.CheckAliveAsync();
- logger.LogInformation("Self check resunt: " + r);
- }
- var hubRegister = app.Services.GetService<HubRegister>();
- await (hubRegister?.Register() ?? Task.CompletedTask);
- await app.WaitForShutdownAsync();
- await (hubRegister?.UnRegister() ?? Task.CompletedTask);
|