Tài liệu

Hợp đồng kết nối

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

Không gian tên: Nalix.Abstractions.Networking (và Nalix.Abstractions.Networking.Protocols)
Assembly: Nalix.Abstractions

Nalix.Abstractions.Networking định nghĩa các hợp đồng kết nối, hub, listener và protocol không phụ thuộc transport, được Nalix.Network triển khai và được Nalix.Runtime và Nalix.Hosting sử dụng.

Ánh xạ mã nguồn

  • src/Nalix.Abstractions/Networking/IConnection.cs
  • src/Nalix.Abstractions/Networking/IConnection.ErrorTracked.cs
  • src/Nalix.Abstractions/Networking/IConnection.Hub.cs
  • src/Nalix.Abstractions/Networking/IConnection.Transmission.cs
  • src/Nalix.Abstractions/Networking/IConnection.TrafficMetrics.cs
  • src/Nalix.Abstractions/Networking/IConnectionEventArgs.cs
  • src/Nalix.Abstractions/Networking/INetworkEndpoint.cs
  • src/Nalix.Abstractions/Networking/IListener.cs
  • src/Nalix.Abstractions/Networking/IFrameProcessor.cs
  • src/Nalix.Abstractions/Networking/ITransportSequencer.cs
  • src/Nalix.Abstractions/Networking/TransportFraming.cs
  • src/Nalix.Abstractions/Networking/IProtocol.cs
  • src/Nalix.Abstractions/Networking/Protocols/IOpCodeExtractor.cs

IConnection

public interface IConnection : IConnectionErrorTracked, IDisposable biểu diễn một kết nối client đang hoạt động (TCP, UDP hoặc WebSocket).

Thành phầnKiểuMô tả
ConnectionIdulongSnowflake 64-bit duy nhất được gán cho kết nối.
UserIdstring?Mã định danh người dùng đã xác thực do ứng dụng gán (tùy chọn).
NetworkEndpointINetworkEndpointEndpoint của client từ xa (string Address { get; }).
IsDisposedbooltrue khi kết nối đã đóng và đã được dispose.
UpTimelongThời gian kết nối đã hoạt động, tính bằng mili giây.
LastPingTimelongĐộ trễ ping round-trip gần nhất, tính bằng mili giây.
ExcludeFromIdleTimeoutboolKhi true, loại kết nối khỏi các lượt quét idle timeout của TimingWheel.
AttributesIObjectMap<AttributeKey, object>Kho metadata key-value theo từng kết nối, an toàn đa luồng.
LevelPermissionLevelMức ủy quyền hiện tại (NONE, POW_VERIFIED, ESTABLISHED, USER, v.v.).
AlgorithmCipherSuiteTypeBộ mật mã đối xứng/AEAD đã thương lượng (Chacha20Poly1305, Salsa20Poly1305, v.v.).
SecretBytes32Khóa bí mật phiên 32 byte đã thương lượng (Bytes32, bị xóa khi đóng).
IsUdpCreatedbooltrue khi kết nối đã có binding transport UDP đang hoạt động.
PacketClassifierIOpCodeExtractorBộ phân loại dùng để trích opcode 16-bit từ khung đầu vào thô.
TCPIConnection.ITransportGiao diện transport Stream/TCP (hoặc WebSocket).
UDPIConnection.ITransport?Giao diện transport Datagram/UDP (null cho đến khi UDP được gắn).
ErrorCountintKế thừa từ IConnectionErrorTracked — tổng số lỗi protocol/framing đã ghi nhận trên kết nối này.
IncrementErrorCount()voidTăng nguyên tử ErrorCount (được ConnectionGuard kiểm tra).
OnCloseEventevent EventHandler<IConnectionEventArgs>Được kích hoạt khi kết nối đóng.
OnProcessEventevent EventHandler<IConnectionEventArgs>Được kích hoạt khi khung đầu vào thô sẵn sàng cho IProtocol.ProcessMessage.
OnPostProcessEventevent EventHandler<IConnectionEventArgs>Được kích hoạt sau khi IProtocol.PostProcessMessage hoàn tất.
Disconnect(string? reason = null)voidĐóng ngay lập tức và hủy đăng ký kết nối.
UpdateIdleTimeout(int newTimeoutMs)voidCập nhật động ngân sách idle timeout của kết nối này trong TimingWheel.

Hợp đồng transport lồng nhau (IConnection.ITransport & IConnection.ISocketTransport)

  • IConnection.ITransport : ITransportSequencer:
    • TransportFraming Framing { get; } (None, UInt16LengthPrefixed, VarIntLengthPrefixed)
    • void UseFraming(TransportFraming newFraming)
    • void Send(ReadOnlySpan<byte> message)
    • ValueTask SendAsync(ReadOnlyMemory<byte> message, CancellationToken cancellationToken = default)
    • void BeginReceive(CancellationToken cancellationToken = default)
    • ValueTask<IAsyncDisposable> AcquireSendLockAsync(CancellationToken cancellationToken = default)
    • ValueTask SendAsyncCore(ReadOnlyMemory<byte> data, CancellationToken cancellationToken = default)
    • ValueTask SendAsyncCore(IBufferLease lease, CancellationToken cancellationToken = default)
  • IConnection.ISocketTransport : ITransport:
    • Socket Socket { get; }
    • Task? ReceiveLoopTask { get; }
    • byte[]? StolenData { get; }
    • Socket Unwrap()

IConnectionTrafficMetrics

Được Connection, WebSocketConnection và PassthroughConnection triển khai để cung cấp các bộ đếm lưu lượng nguyên tử:

Thành phầnKiểuMô tả
BytesSentlongTổng số byte trên dây đã truyền qua kết nối này.
BytesReceivedlongTổng số byte trên dây đã nhận qua kết nối này.
PacketsDroppedlongTổng số gói tin bị loại do tràn hàng đợi hoặc giới hạn tốc độ.
IncrementBytesSent(int bytes)voidCộng nguyên tử bytes vào BytesSent.
IncrementBytesReceived(int bytes)voidCộng nguyên tử bytes vào BytesReceived.
IncrementPacketsDropped()voidTăng nguyên tử PacketsDropped.

ConnectionSequenceState

public sealed class ConnectionSequenceState (Nalix.Abstractions.Networking, src/Nalix.Abstractions/Networking/ConnectionSequenceState.cs) là đối tượng giữ số thứ tự của từng kết nối, có pool, dùng cho việc tiếp tục phiên. Các thuộc tính (uint, get/set): TcpSendSequence, TcpReceiveSequence, UdpSendSequence, UdpReceiveSequence. ResetForPool() đặt cả bốn về 0.

IConnectionHub

public interface IConnectionHub : IReportable, IDisposable là registry phân mảnh (sharded), an toàn đa luồng của tất cả kết nối máy chủ đang hoạt động:

Thành phầnChữ kýMô tả
Countint Count { get; }Tổng số kết nối đang được đăng ký.
ConnectionUnregisteredevent Action<IConnection>?Được phát ra khi một kết nối bị gỡ khỏi hub.
RegisterConnectionvoid RegisterConnection(IConnection connection)Đăng ký một kết nối vừa được chấp nhận.
UnregisterConnectionvoid UnregisterConnection(IConnection connection)Gỡ một kết nối khỏi hub.
GetConnection(ulong)IConnection? GetConnection(ulong id)Tra cứu kết nối đang hoạt động theo ConnectionId 64-bit.
GetConnection(ReadOnlySpan<byte>)IConnection? GetConnection(ReadOnlySpan<byte> id)Tra cứu kết nối đang hoạt động theo span Snowflake little-endian 8 byte.
ListConnections()IReadOnlyCollection<IConnection> ListConnections()Trả về snapshot của tất cả kết nối đang hoạt động.
ListConnections(INetworkEndpoint)IReadOnlyCollection<IConnection> ListConnections(INetworkEndpoint endPoint)Trả về tất cả kết nối đang hoạt động khớp với endPoint.

IProtocol & các hợp đồng hỗ trợ pipeline

  • IProtocol : IDisposable, IReportable (Nalix.Abstractions.Networking):
    • bool KeepConnectionOpen { get; }
    • IFrameProcessor FrameProcessor { get; }
    • IOpCodeExtractor OpCodeExtractor { get; }
    • void OnAccept(IConnection connection, CancellationToken cancellationToken = default)
    • void ProcessMessage(object? sender, IConnectionEventArgs args)
    • void PostProcessMessage(object? sender, IConnectionEventArgs args)
  • IListener : IActivatable, IReportable:
    • void Activate(CancellationToken cancellationToken = default) (kế thừa từ IActivatable)
    • void Deactivate(CancellationToken cancellationToken = default) (kế thừa từ IActivatable)
  • IFrameProcessor:
    • bool SupportsInlineProcessing => false
    • void ProcessFrame(object? sender, IConnectionEventArgs args)
  • IOpCodeExtractor:
    • ushort Extract(ReadOnlySpan<byte> payload)
  • ITransportSequencer:
    • ISequenceCounter SendSequence { get; }
    • ISequenceCounter ReceiveSequence { get; }
    • uint CurrentSendSequence { get; }
    • uint CurrentReceiveSequence { get; }
    • uint NextSendSequence()
    • uint NextReceiveSequence()

API liên quan