Program.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using CompServ.Worker;
  2. using Microsoft.AspNetCore.Builder;
  3. using Microsoft.AspNetCore.Hosting;
  4. using Microsoft.AspNetCore.Http;
  5. using Microsoft.AspNetCore.Server.Kestrel.Core;
  6. using Microsoft.Extensions.DependencyInjection;
  7. using Microsoft.Extensions.Hosting;
  8. using Microsoft.Extensions.Logging;
  9. using Microsoft.Extensions.Logging.Console;
  10. using System;
  11. using CompServ.ClientLibrary;
  12. using Microsoft.AspNetCore.Hosting.Server.Features;
  13. using Microsoft.AspNetCore.Hosting.Server;
  14. using Microsoft.AspNetCore.Http.Features;
  15. if (args.Length > 0)
  16. {
  17. StatusHolder.HubServer = args[0];
  18. if (args.Length > 1 && int.TryParse(args[1], out var ratioArg) && ratioArg > 1) StatusHolder.Ratio = ratioArg;
  19. }
  20. var builder = WebApplication.CreateBuilder(args);
  21. //控制台日志格式
  22. builder.Services.AddLogging(opt =>
  23. {
  24. opt.AddSimpleConsole(p =>
  25. {
  26. p.TimestampFormat = "[dd HH:mm:ss] ";
  27. p.SingleLine = true;
  28. p.ColorBehavior = LoggerColorBehavior.Enabled;
  29. });
  30. });
  31. builder.Services.Configure<LoggerFilterOptions>(options =>
  32. {
  33. options.AddFilter((category, level) =>
  34. {
  35. if (level == LogLevel.Debug) return false;
  36. if (level == LogLevel.Trace) return false;
  37. if (category == "Microsoft.AspNetCore.Hosting.Diagnostics" && level == LogLevel.Information) return false;
  38. if (category == "Microsoft.AspNetCore.Routing.EndpointMiddleware" && level == LogLevel.Information) return false;
  39. if (category == "Microsoft.AspNetCore.Server.Kestrel" && level == LogLevel.Information) return false;
  40. if (category == "Microsoft.AspNetCore.Server.Kestrel.Http2" && level == LogLevel.Information) return false;
  41. if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker" && level == LogLevel.Information) return false;
  42. if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor" && level == LogLevel.Information) return false;
  43. if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor" && level == LogLevel.Information) return false;
  44. return true; // 其他日志保留
  45. });
  46. });
  47. //配置HTTP1、HTTP2端口
  48. builder.WebHost.UseKestrel((_, kso) =>
  49. {
  50. kso.ListenAnyIP(0, lo => lo.Protocols = HttpProtocols.Http2);
  51. kso.ListenAnyIP(0, lo => lo.Protocols = HttpProtocols.Http1);
  52. });
  53. builder.Services.Configure<KestrelServerOptions>(options =>
  54. {
  55. options.Limits.MaxRequestBodySize = 100 * 1024 * 1024; // 设置最大请求体大小 100MB
  56. });
  57. try
  58. {
  59. Console.Title = "...";
  60. builder.Services.AddHostedService<ConsoleTitleUpdateService>();
  61. }
  62. catch
  63. {
  64. //EAT ERR
  65. }
  66. if (StatusHolder.HubServer != null) builder.Services.AddSingleton<HubRegister>();
  67. builder.Services.AddControllers();
  68. var app = builder.Build();
  69. app.Use(async (context, next) =>
  70. {
  71. context.Request.EnableBuffering(); // this used to be EnableRewind
  72. await next(context);
  73. });
  74. app.MapControllers();
  75. app.MapGet("/", () => "I am worker!");
  76. await app.StartAsync();
  77. // ↑↓ await app.RunAsync();
  78. {
  79. var logger = app.Services.GetRequiredService<ILogger<Program>>();
  80. logger.LogInformation("Self check...");
  81. var svr = app.Services.GetRequiredService<IServer>();
  82. var saf = svr.Features.GetRequiredFeature<IServerAddressesFeature>();
  83. var listeningPort = new Uri(saf.Addresses.First()).Port;
  84. var client = new CompServWorkerClient("http://localhost:" + listeningPort);
  85. var r = await client.CheckAliveAsync();
  86. logger.LogInformation("Self check resunt: " + r);
  87. }
  88. var hubRegister = app.Services.GetService<HubRegister>();
  89. await (hubRegister?.Register() ?? Task.CompletedTask);
  90. await app.WaitForShutdownAsync();
  91. await (hubRegister?.UnRegister() ?? Task.CompletedTask);