Tài liệu

Hợp đồng phiên

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

Không gian tên: Nalix.Abstractions.Networking.Sessions
Assembly: Nalix.Abstractions

Nalix.Abstractions.Networking.Sessions định nghĩa các hợp đồng để ghi nhận, lưu trữ và tiêu thụ nguyên tử trạng thái phiên, hỗ trợ tiếp tục phiên không cần RTT (SessionResume).

Ánh xạ mã nguồn

  • src/Nalix.Abstractions/Networking/Sessions/ISessionService.cs
  • src/Nalix.Abstractions/Networking/Sessions/ISessionFactory.cs
  • src/Nalix.Abstractions/Networking/Sessions/ISessionStore.cs
  • src/Nalix.Abstractions/Networking/Sessions/ISessionPersistencePolicy.cs
  • src/Nalix.Abstractions/Networking/Sessions/SessionEntry.cs
  • src/Nalix.Abstractions/Networking/Sessions/SessionSnapshot.cs
  • src/Nalix.Abstractions/Networking/Sessions/SessionScope.cs

Tổng quan thành phần công khai

KiểuLoạiThành phần công khai
ISessionServiceinterface : IDisposableValueTask SaveSessionAsync(IConnection, CancellationToken), ValueTask<SessionScope> ConsumeAsync(ulong sessionToken, Func<SessionEntry, bool>? predicate = null, CancellationToken ct = default)
ISessionStoreinterfaceValueTask StoreAsync(SessionEntry, CancellationToken), ValueTask<SessionScope> ConsumeAsync(ulong sessionToken, Func<SessionEntry, bool>? predicate = null, CancellationToken ct = default)
ISessionFactoryinterfaceSessionEntry CreateSession(IConnection connection)
ISessionPersistencePolicyinterfacebool ShouldPersist(IConnection connection)
SessionScopereadonly struct : IDisposableSessionEntry? Value { get; }, bool IsValid { get; }, void Dispose(), implicit operator SessionEntry?(SessionScope)
SessionEntryclassSessionSnapshot Snapshot, ulong ConnectionId, void Return()
SessionSnapshotclassulong SessionToken, long CreatedAtUnixMilliseconds, long ExpiresAtUnixMilliseconds, Bytes32 Secret, CipherSuiteType Algorithm, PermissionLevel Level, IObjectMap<AttributeKey, object>? Attributes, void ClearSecret(), void Return()

ISessionService & ISessionStore

Cả ISessionService.ConsumeAsync và ISessionStore.ConsumeAsync đều thực hiện thao tác lấy-và-xóa nguyên tử và trả về SessionScope:

using SessionScope scope = await sessionService.ConsumeAsync(
    sessionToken,
    predicate: entry => entry.Snapshot.ExpiresAtUnixMilliseconds > nowMs,
    cancellationToken: ct);

if (scope.IsValid)
{
    SessionEntry entry = scope.Value!;
    // Khôi phục Secret, Algorithm, Level và bộ đếm sequence lên kết nối mới
}

ISessionFactory & ISessionPersistencePolicy

  • ISessionFactory.CreateSession(IConnection): Tạo SessionEntry và điền SessionSnapshot với ConnectionId của kết nối (SessionToken), Secret 32 byte (Bytes32), Algorithm, Level và Attributes (bao gồm số thứ tự TCP/UDP).
  • ISessionPersistencePolicy.ShouldPersist(IConnection): Đánh giá xem phiên của một kết nối có nên được lưu hay không (mặc định DefaultSessionPersistencePolicy kiểm tra bắt tay mật mã đã hoàn tất và Secret khác không).

API liên quan