WebSocket Session
Trên trang này
Namespace: Nalix.SDK.Transport
Assembly: Nalix.SDK
WebSocketSession (public class WebSocketSession : TransportSession) là transport WebSocket nhị phân phía client trong Nalix.SDK, được xây dựng trên ClientWebSocket, WsFrameSender và WsFrameReader. Khác với TcpSession và UdpSession, WebSocketSession được hỗ trợ trên các target trình duyệt/Blazor WASM (SendAsync) cũng như các runtime desktop/di động.
Ánh xạ mã nguồn
src/Nalix.SDK/Transport/WebSocketSession.cssrc/Nalix.SDK/Transport/Internal/Ws/WsFrameReader.cssrc/Nalix.SDK/Transport/Internal/Ws/WsFrameSender.cssrc/Nalix.SDK/Options/WebSocketTransportOptions.cs
Tham chiếu API công khai
namespace Nalix.SDK.Transport;
public class WebSocketSession : TransportSession
{
public WebSocketSession(
TransportOptions options,
WebSocketTransportOptions? webSocketOptions = null,
SessionState? state = null);
public override TransportOptions Options { get; }
public WebSocketTransportOptions WebSocketOptions { get; }
public override bool IsConnected { get; }
public override event EventHandler? OnConnected;
public override event EventHandler<Exception>? OnDisconnected;
public override event EventHandler<IBufferLease>? OnMessageReceived;
public override event EventHandler<Exception>? OnError;
public event Func<ReadOnlyMemory<byte>, Task>? OnMessageAsync;
public override Task ConnectAsync(string? host = null, ushort? port = null, CancellationToken ct = default);
public override Task DisconnectAsync();
[UnsupportedOSPlatform("browser")]
public void Send(ReadOnlySpan<byte> data, bool encrypt = true);
public override Task SendAsync(IPacket packet, CancellationToken ct = default);
public override Task SendAsync(IPacket packet, bool? encrypt = null, CancellationToken ct = default);
public override Task SendAsync(ReadOnlyMemory<byte> payload, bool? encrypt = null, CancellationToken ct = default);
public override void ResetSequenceCounters();
}
Chi tiết chính
- Xây dựng URI và Subprotocol:
ConnectAsynctạows://{host}:{port}{path}(hoặcwss://khiWebSocketOptions.UseTls == true), chuẩn hóaWebSocketOptions.Path(mặc định"/ws/"), và đăng kýWebSocketOptions.SubProtocol(mặc định"nalix.v1"). - Vòng nhận an toàn cho WASM:
ConnectAsynckhởi động_reader.ReceiveLoopAsynctrực tiếp như một async task thay vìTaskCreationOptions.LongRunning, tránh deadlock thread pool trên runtime Blazor WebAssembly một luồng. - Tương thích đầy đủ với handshake và tiện ích mở rộng: Vì
WebSocketSessiontriển khaiITransportSession, mọi tiện ích SDK (HandshakeAsync,ResumeSessionAsync,RequestAsync,TryRequestAsync,StreamAsync,CreateRpcClient<T>) hoạt động y hệt trên WebSocket.
Ví dụ sử dụng
using System;
using System.Threading.Tasks;
using Nalix.SDK.Options;
using Nalix.SDK.Transport;
using Nalix.SDK.Transport.Extensions;
TransportOptions options = new()
{
Address = "127.0.0.1",
Port = 57207,
ConnectTimeoutMillis = 5_000
};
WebSocketTransportOptions wsOptions = new()
{
Path = "/ws/",
SubProtocol = "nalix.v1",
UseTls = false
};
using WebSocketSession session = new(options, wsOptions);
session.OnConnected += (_, _) => Console.WriteLine("WebSocket connected.");
session.OnDisconnected += (_, ex) => Console.WriteLine($"Disconnected: {ex.Message}");
await session.ConnectAsync();
await session.HandshakeAsync();
ChatResponse reply = await session.RequestAsync<ChatResponse>(
new ChatRequest { Text = "Hello over WebSocket!" },
RequestOptions.Default.WithEncrypt());
await session.DisconnectAsync();