Tài liệu

Nalix.SDK

Thời gian đọc 5 phút Gói: Nalix.SDK
Trên trang này

Nalix.SDK là gói transport phía client cấp 3 để kết nối các ứng dụng .NET 10 (console, desktop, di động, hoặc client Unity/Godot) với máy chủ Nalix qua TCP hoặc UDP.

Luồng kết nối client

Architecture Diagram
flowchart TD
    A["TransportOptions"] --> B["TcpSession / UdpSession"]
    B --> C["ConnectAsync()"]
    C --> D["ConnectWithResumeAsync() / HandshakeAsync()"]
    D --> E["OnReady Fired & KeepAlive Started"]
    E --> F["SendAsync() / RequestAsync<TResponse>() / Subscribe<T>()"]

Thành phần cốt lõi

  • TransportSession — Lớp cơ sở trừu tượng triển khai ITransportSession, State (SessionState), WaitUntilReadyAsync, OnConnected, OnReady, OnDisconnected, OnMessageReceived, OnError, probe keepalive và ghép cặp các request đang chờ.
  • TcpSession — Phiên client TCP có khung, dùng pool SocketAsyncEventArgs và hỗ trợ kết nối lại tự động.
  • UdpSession — Phiên datagram UDP đi kèm hoặc độc lập, tự động thêm token phiên 8 byte (SessionToken) đã thương lượng qua TCP.
  • SessionState — Trạng thái runtime tạm thời (Secret, SessionToken, EncryptionEnabled, LocalPort), tách khỏi TransportOptions bền vững.
  • Mở rộng transport (Nalix.SDK.Transport.Extensions):
    • HandshakeExtensions (HandshakeAsync)
    • ResumeExtensions (ResumeSessionAsync, ConnectWithResumeAsync)
    • RequestExtensions (RequestAsync<TResponse>, TryRequestAsync<TResponse>, CallAsync<TResponse>)
    • StreamExtensions (StreamAsync<TResponse>)
    • ControlExtensions & PingExtensions (NewControl, SendControlAsync, AwaitControlAsync, PingAsync, SyncTimeAsync)
    • CipherExtensions & RekeyExtensions (UpdateCipherAsync, RekeyAsync)
    • TransportSessionSubscriptions (On<TPacket>, OnExact<TPacket>, Subscribe(params IDisposable[]))
  • Phân phối luồng (Nalix.SDK.Dispatch) — IThreadDispatcher và InlineDispatcher để chuyển gói tin nhận được sang luồng chính của game engine hoặc UI.
  • Sinh client RPC có kiểu ([RpcService]) — RpcClientGenerator tự động sinh các triển khai <ServiceName>_RpcClient được phân giải qua session.CreateRpcClient<TService>() cho các interface có chú thích [RpcService].

Ví dụ nhanh

using Nalix.SDK.Options;
using Nalix.SDK.Transport;
using Nalix.SDK.Transport.Extensions;

TransportOptions options = new()
{
    Address = "127.0.0.1",
    Port = 57206,
    AutoReconnectEnabled = true
};

using TcpSession client = new(options);
client.OnConnected += (_, _) => Console.WriteLine("Socket connected");
client.OnReady += (_, _) => Console.WriteLine("Handshake/resume complete");
client.OnDisconnected += (_, ex) => Console.WriteLine($"Disconnected: {ex?.Message}");

await client.ConnectAsync();
await client.HandshakeAsync(); // Thương lượng bí mật phiên X25519 và bật mã hóa

MyResponsePacket reply = await client.RequestAsync<MyResponsePacket>(
    new MyRequestPacket(),
    RequestOptions.Default.WithTimeout(5_000).WithEncrypt());

await client.DisconnectAsync();

Tham chiếu TransportOptions (Nalix.SDK.Options)

TransportOptions kế thừa từ ConfigurationLoader và có thể được khởi tạo trực tiếp trong mã hoặc nạp từ INI qua ConfigurationManager.Instance.Get<TransportOptions>().

Thuộc tínhMặc địnhKiểm tra hợp lệ / Ghi chú nguồn
Address"127.0.0.1"[Length(1)] Địa chỉ IP hoặc tên máy chủ.
Port57206[ValueRange(1, 65535)] Cổng máy chủ đích.
ConnectTimeoutMillis30000[ValueRange(0, int.MaxValue)] 0 tắt timeout kết nối.
NoDelaytrueĐiều khiển TCP_NODELAY (tắt thuật toán Nagle).
BufferSize65536[ValueRange(2048, 1048576)] Kích thước bộ đệm gửi/nhận của socket tính bằng byte.
AlgorithmChacha20Poly1305CipherSuiteType dùng khi bật mã hóa.
CompressionEnabledtrueBật nén LZ4 cho các frame đi ra vượt quá CompressionThreshold.
CompressionThreshold512Kích thước payload tối thiểu (byte) để kích hoạt nén LZ4.
AsyncQueueCapacity1024[ValueRange(1, 65536)] Cài đặt dung lượng dành trước (dự phòng).
MaxUdpDatagramSize1400[ValueRange(64, 65507)] Kích thước datagram UDP tối đa tính cả token phiên 8 byte.
ServerPublicKeynullKhóa công khai X25519 của máy chủ dạng HEX được ghim, tùy chọn, để chống tấn công MitM.
AllowTofutrueCho phép khám phá khóa công khai theo Trust-On-First-Use (TOFU) khi chưa đặt ServerPublicKey.
PersistTofuKeyfalseLưu ServerPublicKey được khám phá qua TOFU vào kho cấu hình sau khi xác minh.
ResumeEnabledtrueThử SessionResume trước khi quay về bắt tay X25519 đầy đủ.
ResumeTimeoutMillis3000[ValueRange(100, int.MaxValue)] Timeout (ms) cho các yêu cầu tiếp tục phiên.
ResumeFallbackToHandshaketrueTự động chuyển sang bắt tay mới nếu tiếp tục phiên thất bại.
AutoReconnectEnabledfalseTự động kết nối lại qua ReconnectSupervisor khi ngắt kết nối bất thường.
ReconnectBaseDelayMillis500[ValueRange(1, int.MaxValue)] Độ trễ backoff ban đầu (ms) trước lần kết nối lại đầu tiên.
ReconnectMaxDelayMillis30000[ValueRange(1, int.MaxValue)] Trần backoff lũy thừa (ms) giữa các lần kết nối lại.
ReconnectMaxAttempts0[ValueRange(0, int.MaxValue)] Số lần kết nối lại liên tiếp tối đa (0 = không giới hạn).
KeepAliveIntervalMillis0[ValueRange(0, int.MaxValue)] Chu kỳ PING định kỳ (ms) (0 = tắt).
KeepAliveTimeoutMillis5000[ValueRange(100, int.MaxValue)] Timeout (ms) cho mỗi phản hồi PONG keepalive.
KeepAliveMissThreshold3[ValueRange(1, int.MaxValue)] Số PONG bị lỡ trước khi đánh dấu socket lỗi để kết nối lại.
TimeSyncEnabledtrueCho phép SyncTimeAsync đồng bộ độ lệch đồng hồ đơn điệu/Unix cục bộ.
TimeOffsetMs0.0Độ lệch đồng hồ hiện tại (mili giây) do đồng bộ thời gian áp dụng.

Tham chiếu RequestOptions (Nalix.SDK.Options)

Thuộc tínhMặc địnhKiểm tra hợp lệ / Ghi chú nguồn
TimeoutMs5000Phải >= 0; 0 chờ vô thời hạn. Cấu hình qua .WithTimeout(ms).
RetryCount0Phải >= 0; việc thử lại chỉ xảy ra khi có TimeoutException. Cấu hình qua .WithRetry(count).
EncryptfalseMã hóa frame yêu cầu đi ra. Cấu hình qua .WithEncrypt(bool).

Trang API chính