Tùy chọn Timing Wheel
Trên trang này
Không gian tên: Nalix.Network.Options
Assembly: Nalix.Network
TimingWheelOptions (public sealed partial class TimingWheelOptions : ConfigurationLoader, IValidatableConfiguration) cấu hình bộ hẹn giờ hashed wheel (TimingWheel) mà Nalix.Network dùng để phát hiện và đóng các kết nối nhàn rỗi.
Ánh xạ mã nguồn
src/Nalix.Network/Options/TimingWheelOptions.cssrc/Nalix.Network/Internal/Time/TimingWheel.cssrc/Nalix.Network/Connections/Connection.cs
Giá trị mặc định và kiểm tra hợp lệ
Được tải từ mục [TimingWheel] trong default.ini:
| Thuộc tính | Kiểu | Mặc định | Kiểm tra hợp lệ | Tác động khi chạy |
|---|---|---|---|---|
BucketCount | int | 512 | [ValueRange(1, int.MaxValue)] | Số lượng slot TimingWheelBucket trong wheel (giá trị lũy thừa của 2 cho phép đánh chỉ mục bằng bitmask). |
TickDuration | int | 1000 | [ValueRange(1, int.MaxValue)] | Khoảng tick tính bằng mili giây cho vòng lặp worker PeriodicTimer chạy nền. |
IdleTimeoutMs | int | 60_000 (60s) | [ValueRange(1, int.MaxValue)] | Ngưỡng nhàn rỗi mặc định của kết nối tính bằng mili giây trước khi Disconnect() được gọi. |
WheelDrainTimeoutMs | int | 5000 (5s) | [ValueRange(0, 60000)] | Thời gian chờ tối đa tính bằng mili giây để worker timing wheel xả hết công việc một cách êm thuận trong Deactivate. |
Validate() chạy this.ValidateDataAnnotations() và ném ValidationException khi vi phạm ràng buộc.
Luồng bucket và tác vụ khi chạy
flowchart LR
A["TimingWheel Constructed"] --> B["Load & Validate TimingWheelOptions"]
B --> C["Allocate TimingWheelBucket[BucketCount] + Lock[]"]
C --> D["Activate() -> ScheduleWorker"]
D --> E["PeriodicTimer Tick (TickDuration ms)"]
E --> F["Process Current TimingWheelBucket"]
F --> G{"idleMs >= conn.IdleTimeoutMs?"}
G -->|Yes| H["conn.Disconnect()"]
G -->|No| I["Reschedule TimeoutTask into Future Bucket"]- Mỗi
TimingWheelBucketdùng danh sách liên kết đôi gồm các instanceTimeoutTasklấy từ pool, được bảo vệ bằng khóa monitor riêng của bucket (lock (bucket)) để chèn và xóa với độ phức tạp $O(1)$. Connection,WebSocketConnectionvàPassthroughConnectionkhởi tạoIdleTimeoutMsriêng cho từng kết nối từTimingWheelOptions.IdleTimeoutMs, và có thể ghi đè động quaconnection.UpdateIdleTimeout(newTimeoutMs).