Несколько WebSocket-сообщений в C#
Пока ClientWebSocket в состоянии Open, можно
отправить несколько текстовых кадров подряд.
На echo-сервисе каждый кадр обычно возвращается отдельным ответом. Ниже клиент шлёт два сообщения и проверяет, что соединение остаётся открытым:
using System.Net.WebSockets;
using System.Text;
using ClientWebSocket client = new();
using CancellationTokenSource cts = new(TimeSpan.FromSeconds(5));
await client.ConnectAsync(new Uri("wss://echo.websocket.events"), cts.Token);
await client.SendAsync(
Encoding.UTF8.GetBytes("alpha"),
WebSocketMessageType.Text,
true,
CancellationToken.None);
await client.SendAsync(
Encoding.UTF8.GetBytes("beta"),
WebSocketMessageType.Text,
true,
CancellationToken.None);
Console.WriteLine(client.State);
После серии отправок ответы читают по одному.
Echo-сервис присылает отдельный кадр на каждый
SendAsync, поэтому первое чтение
возвращает первую фразу:
using System.Net.WebSockets;
using System.Text;
using ClientWebSocket client = new();
using CancellationTokenSource cts = new(TimeSpan.FromSeconds(5));
await client.ConnectAsync(new Uri("wss://echo.websocket.events"), cts.Token);
for (int i = 1; i <= 2; i++)
{
await client.SendAsync(
Encoding.UTF8.GetBytes("msg" + i),
WebSocketMessageType.Text,
true,
CancellationToken.None);
}
byte[] buf = new byte[256];
WebSocketReceiveResult part = await client.ReceiveAsync(buf, CancellationToken.None);
Console.WriteLine(Encoding.UTF8.GetString(buf, 0, part.Count));
Отправьте на echo-сервис три разные короткие фразы на английском и выведите длину первого полученного ответа.