Nalix.Runtime
Trên trang này
- Ánh xạ mã nguồn#
- Vị trí trong kiến trúc#
- Thành phần cốt lõi#
- 1. Điều phối gói tin theo shard (PacketDispatchChannel)#
- 2. Middleware đầu vào tích hợp (Nalix.Runtime.Middleware.Standard)#
- 3. Nguyên thủy bảo vệ & giới hạn tốc độ#
- 4. Handler giao thức tích hợp (Nalix.Runtime.Handlers)#
- 5. Kho lưu phiên & nhóm kết nối#
- Các dạng trả về của handler được hỗ trợ#
- Gói liên quan#
- Trang API chính#
Nalix.Runtime là bộ máy điều phối gói tin phía máy chủ cấp 3. Nó vận hành việc điều phối gói tin theo shard đa luồng (PacketDispatchChannel), thực thi middleware đầu vào/đầu ra (MiddlewarePipeline<TPacket>), gọi handler không dùng reflection, các nguyên thủy giới hạn tốc độ, và tiếp tục phiên (SessionService).
Ánh xạ mã nguồn
src/Nalix.Runtime/Dispatching/PacketDispatchChannel.cssrc/Nalix.Runtime/Dispatching/PacketDispatcherBase.cssrc/Nalix.Runtime/Dispatching/PacketContext.cssrc/Nalix.Runtime/Dispatching/PacketSender.cssrc/Nalix.Runtime/Middleware/MiddlewarePipeline.cssrc/Nalix.Runtime/Middleware/Standard/PermissionMiddleware.cssrc/Nalix.Runtime/Middleware/Standard/RateLimitMiddleware.cssrc/Nalix.Runtime/Middleware/Standard/TimeoutMiddleware.cssrc/Nalix.Runtime/Handlers/HandshakeHandlers.cssrc/Nalix.Runtime/Handlers/ProofOfWorkHandlers.cssrc/Nalix.Runtime/Handlers/SessionHandlers.cssrc/Nalix.Runtime/Handlers/SystemControlHandlers.cssrc/Nalix.Runtime/Handlers/SystemTimeSyncHandlers.cssrc/Nalix.Runtime/Sessions/SessionService.cssrc/Nalix.Runtime/Groups/InMemoryGroupStore.cs
Vị trí trong kiến trúc
flowchart TD
subgraph L3 ["Level 3 — Service Layer"]
Runtime["Nalix.Runtime (Dispatch, Middleware & Sessions)"]
Network["Nalix.Network (Listeners & Connections)"]
end
subgraph L2 ["Level 2 — Core Layer"]
Codec["Nalix.Codec (PacketRegistry & Serialization)"]
Framework["Nalix.Framework (InstanceManager & Pools)"]
end
subgraph L1_0 ["Levels 0 & 1 — Foundation"]
Env["Nalix.Environment (Memory & Configuration)"]
Abs["Nalix.Abstractions (Contracts & Attributes)"]
end
Runtime --> Codec
Runtime --> Framework
Network --> Framework
Codec --> Env
Framework --> Env
Env --> AbsThành phần cốt lõi
1. Điều phối gói tin theo shard (PacketDispatchChannel)
PacketDispatchChannel là bộ máy thông lượng cao xử lý các frame mạng đến:
- Lập lịch công bằng theo kết nối & vòng lặp worker theo shard — Các vòng lặp worker mở rộng theo số nhân CPU (hoặc
WithDispatchLoopCount(...)) và lấy từ các hàng đợi nhận biết độ ưu tiên mà không bị chặn đầu hàng giữa các kết nối. - Hàng đợi ưu tiên — Frame được lập lịch theo
PacketPriority(URGENT,HIGH,MEDIUM,LOW,NONE) và chính sách bỏ củaDispatchOptions(DropNewest,DropOldest,Block,Coalesce). - Bắt buộc mã hóa trước handler — Kiểm tra
[PacketEncryption](context.IsEncrypted) trongPacketHandler<TPacket>.CanExecutetrước khi gọi handler. - Gọi handler không dùng reflection — Phân giải các delegate handler đã biên dịch được
PacketHandlerGeneratorsinh lúc build (hỗ trợIPacketContext<TPacket>, các tham số tham chiếu[FromScope]đi kèm ở cuối được phân giải từcontext.Scope, và các field/property[Inject]của controller).
using Nalix.Abstractions.Networking.Packets;
using Nalix.Runtime.Dispatching;
PacketDispatchChannel dispatch = new(options =>
{
options.WithErrorHandling((ex, opcode) =>
{
// Hook xử lý lỗi tùy chỉnh cho ngoại lệ handler chưa được xử lý
})
.WithMiddleware(new MyAuditMiddleware())
.WithHandler(() => new AccountHandlers());
});
dispatch.Activate();
2. Middleware đầu vào tích hợp (Nalix.Runtime.Middleware.Standard)
Nalix.Runtime đi kèm ba thành phần middleware đầu vào điều khiển bằng attribute trong Nalix.Runtime.Middleware.Standard:
| Middleware | Thứ tự | Giai đoạn | Hành vi |
|---|---|---|---|
PermissionMiddleware | -50 | Inbound | Áp dụng [PacketPermission] (PermissionEvaluation.MinimumLevel hoặc PermissionEvaluation.StrictMatch) lên context.Connection.Level. |
RateLimitMiddleware | 50 | Inbound | Áp dụng chính sách [PacketRateLimit] theo opcode (PolicyRateLimiter) hoặc quay về TokenBucketLimiter toàn cục. |
TimeoutMiddleware | 75 | Inbound | Bọc việc thực thi handler trong một CancellationTokenSource liên kết, do [PacketTimeout] điều khiển. |
3. Nguyên thủy bảo vệ & giới hạn tốc độ
TokenBucketLimiter: Bộ định hình lưu lượng token bucket theo endpoint (TokenBucketOptions).PolicyRateLimiter: Áp dụng hạn ngạch[PacketRateLimit]ở mức method.DirectiveGuard: Ngăn khuếch đạiDirectiveđi ra trong điều kiện bị flood (DirectiveGuardOptions).
4. Handler giao thức tích hợp (Nalix.Runtime.Handlers)
HandshakeHandlers&ProofOfWorkHandlers: Trao đổi khóa X25519 phía máy chủ, phục vụ khóa công khai TOFU, lưu trữ chứng chỉ (FileCertificateStore), và xác minh Proof-of-Work (AdaptiveProofOfWorkPolicy).SessionHandlers: Tiếp tục phiên không trạng thái (SessionResume) với chứng minh sở hữuHmacKeccak256và xoay vòng token nguyên tử quaISessionService.SystemControlHandlers&SystemTimeSyncHandlers: Xử lý các frameControl(PING/PONG,DISCONNECT,CIPHER_UPDATE,PUBLIC_KEY_REQUEST) vàTimeSync.
5. Kho lưu phiên & nhóm kết nối
SessionService,SessionFactory,InMemorySessionStore,SessionPersistenceObserver: GhiSessionSnapshotkhi ngắt kết nối và khôi phục khóa mã hóa, mức quyền và thuộc tính khi có yêu cầuSessionResumehợp lệ.InMemoryGroupStore&GroupMembershipObserver: Triển khaiIConnectionGroupRegistrycho phát tin theo phòng/kênh, và tự động gỡ các client đã ngắt kết nối khỏi mọi nhóm.
Các dạng trả về của handler được hỗ trợ
| Kiểu trả về | Hành vi lúc chạy |
|---|---|
void / Task / ValueTask | Thực thi tác dụng phụ; không gửi phản hồi tự động. |
TPacket / Task<TPacket> / ValueTask<TPacket> | Tuần tự hóa và gửi gói tin trả về ngược lại trên kết nối của người gọi (ReplyAsync gán SequenceId của yêu cầu khi response.Header.SequenceId == 0). |
IAsyncEnumerable<TPacket> | Stream từ máy chủ từng gói được yield qua ReplyAsync với look-ahead 1 phần tử, và đánh dấu IPacketStreamable.IsEndOfStream = true trên gói cuối. |
byte[] / Memory<byte> / ReadOnlyMemory<byte> | Gửi trực tiếp bộ đệm thô tới kết nối của người gọi. |
ReturnValidation | Đánh giá kết quả kiểm tra hợp lệ khai báo trước khi tiếp tục. |
Gói liên quan
- Nalix.Network — Các listener transport TCP, UDP và WebSocket
- Nalix.Hosting — Bộ dựng máy chủ kiểu fluent
- Nalix.Codec — Registry gói tin, tuần tự hóa và biến đổi frame
- Nalix.Framework — DI, worker và pool đối tượng