Tùy chọn Hosting
Trên trang này
Không gian tên: Nalix.Hosting.Options
Assembly: Nalix.Hosting
HostingOptions cấu hình hành vi khởi tạo máy chủ (Bootstrap.Initialize()), chẩn đoán khởi động trên console, giới hạn tối thiểu số luồng của ThreadPool của .NET, ghi log các ngoại lệ không được xử lý toàn cục, và độ phân giải timer 1 ms trên Windows (timeBeginPeriod(1)).
Ánh xạ mã nguồn
src/Nalix.Hosting/Options/HostingOptions.cssrc/Nalix.Hosting/Bootstrap.cssrc/Nalix.Hosting/Internal/DiagnosticChannel.cs
Vòng đời Bootstrap (Bootstrap.Initialize())
Nalix.Hosting tự động gọi Bootstrap.Initialize() thông qua [ModuleInitializer] khi assembly được nạp:
- Đường dẫn cấu hình máy chủ riêng: Gọi
ConfigurationManager.Instance.SetConfigFilePath(Path.Combine(Directories.ConfigurationDirectory, "server.ini"))để cấu hình máy chủ được tách riêng trongserver.ini(tránh xung đột vớidefault.inicủa client). - Khởi tạo các option: Chạm vào tất cả các lớp option của framework, codec, network, runtime và hosting thông qua
ConfigurationManager.Instance.Get<TOptions>(), rồi gọiConfigurationManager.Instance.Flush()để ghi một templateserver.iniđầy đủ ra đĩa. - Tinh chỉnh ThreadPool: Áp dụng
MinWorkerThreadsvà/hoặcMinCompletionPortThreadsthông quaThreadPool.SetMinThreads(...)khi một trong hai thuộc tính có giá trị> 0. - Trình xử lý ngoại lệ toàn cục: Khi
EnableGlobalExceptionHandlinglàtrue, đăng kýAppDomain.CurrentDomain.UnhandledException(ghi log lỗi nghiêm trọng và flushConfigurationManagernếu tiến trình sắp kết thúc) vàTaskScheduler.UnobservedTaskException(ghi log và gọie.SetObserved()). - Timer độ phân giải cao trên Windows: Khi
EnableHighPrecisionTimerlàtruetrên Windows, gọitimeBeginPeriod(1)từwinmm.dllđể nâng độ phân giải timer của hệ điều hành lên1 ms. - Banner khởi động tương tác: Khi
Environment.UserInteractive && !DisableStartupBanner, in banner khởi động của Nalix, các metadata runtime (Version,PID,OS,Arch,Runtime,Config,GC Mode,Timer,Processors,Local IP,Public IPlấy từNALIX_PUBLIC_IP), và đưa ra cảnh báo nếu đang dùng Workstation GC thay vì Server GC.
Thuộc tính và giá trị mặc định
| Thuộc tính | Kiểu | Mặc định | Kiểm tra hợp lệ | Mô tả |
|---|---|---|---|---|
DisableConsoleClear | bool | false | Không có | Nếu true, không gọi Console.Clear() trước khi in banner khởi động (cũng được bỏ qua tự động khi đầu ra console bị chuyển hướng). |
DisableStartupBanner | bool | false | Không có | Nếu true, ẩn banner ASCII và bảng chẩn đoán [INIT] khi khởi động. |
MinWorkerThreads | int | 0 | [ValueRange(0, int.MaxValue)] | Số luồng worker tối thiểu của ThreadPool (0 giữ mặc định của hệ điều hành/.NET; khuyến nghị: ProcessorCount * 2). |
MinCompletionPortThreads | int | 0 | [ValueRange(0, int.MaxValue)] | Số luồng completion port (IOCP) tối thiểu của ThreadPool (0 giữ mặc định của hệ điều hành/.NET). |
EnableGlobalExceptionHandling | bool | true | Không có | Đăng ký các handler UnhandledException và UnobservedTaskException trong quá trình bootstrap. |
EnableHighPrecisionTimer | bool | true | Không có | Gọi timeBeginPeriod(1) trên Windows để có độ phân giải timer 1 ms (tự động được ghép cặp với timeEndPeriod(1) khi tiến trình thoát). |
Validate() thực thi this.ValidateDataAnnotations().
Dọn dẹp khi thoát tiến trình (Bootstrap.OnProcessExit)
Bootstrap đăng ký Console.CancelKeyPress và AppDomain.CurrentDomain.ProcessExit. Khi tiến trình kết thúc, nó sẽ:
- Hủy tất cả worker nền đang chạy thông qua
InstanceManager.Instance.GetExistingInstance<TaskManager>()?.CancelAllWorkers(). - Flush các thay đổi cấu hình đang chờ thông qua
ConfigurationManager.Instance.Flush(). - Giải phóng
InstanceManager.Instance(việc này giải phóng các service đã đăng ký nhưConnectionGuard, đồng thời ghi cơ sở dữ liệu ban lũy tiến xuống đĩa). - Gọi
timeEndPeriod(1)trên Windows nếutimeBeginPeriod(1)đã được bật. - Giải phóng
DiagnosticChannel.
Cấu hình INI (server.ini)
[Hosting]
; Hosting configuration — controls startup diagnostics, console behavior, and lifecycle settings
DisableConsoleClear = false
DisableStartupBanner = false
MinWorkerThreads = 0
MinCompletionPortThreads = 0
EnableGlobalExceptionHandling = true
EnableHighPrecisionTimer = true