Hợp đồng phiên
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.cssrc/Nalix.Abstractions/Networking/Sessions/ISessionFactory.cssrc/Nalix.Abstractions/Networking/Sessions/ISessionStore.cssrc/Nalix.Abstractions/Networking/Sessions/ISessionPersistencePolicy.cssrc/Nalix.Abstractions/Networking/Sessions/SessionEntry.cssrc/Nalix.Abstractions/Networking/Sessions/SessionSnapshot.cssrc/Nalix.Abstractions/Networking/Sessions/SessionScope.cs
Tổng quan thành phần công khai
| Kiểu | Loại | Thành phần công khai |
|---|---|---|
ISessionService | interface : IDisposable | ValueTask SaveSessionAsync(IConnection, CancellationToken), ValueTask<SessionScope> ConsumeAsync(ulong sessionToken, Func<SessionEntry, bool>? predicate = null, CancellationToken ct = default) |
ISessionStore | interface | ValueTask StoreAsync(SessionEntry, CancellationToken), ValueTask<SessionScope> ConsumeAsync(ulong sessionToken, Func<SessionEntry, bool>? predicate = null, CancellationToken ct = default) |
ISessionFactory | interface | SessionEntry CreateSession(IConnection connection) |
ISessionPersistencePolicy | interface | bool ShouldPersist(IConnection connection) |
SessionScope | readonly struct : IDisposable | SessionEntry? Value { get; }, bool IsValid { get; }, void Dispose(), implicit operator SessionEntry?(SessionScope) |
SessionEntry | class | SessionSnapshot Snapshot, ulong ConnectionId, void Return() |
SessionSnapshot | class | ulong 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ạoSessionEntryvà điềnSessionSnapshotvớiConnectionIdcủa kết nối (SessionToken),Secret32 byte (Bytes32),Algorithm,Levelvà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 địnhDefaultSessionPersistencePolicykiểm tra bắt tay mật mã đã hoàn tất vàSecretkhác không).