В настоящее время я изучаю использование websockets для связи между клиентом/агентом и сервером и решил посмотреть на С# для этой цели. Хотя я уже работал с Websockets раньше и С#, это первый раз, когда я использую оба вместе. Первая попытка использовала следующее руководство: http://www.codeproject.com/Articles/618032/Using-WebSocket-in-NET-Part
public static void Main(string[] args)
{
Task t = Echo();
t.Wait();
}
private static async Task Echo()
{
using (ClientWebSocket ws = new ClientWebSocket())
{
Uri serverUri = new Uri("ws://localhost:49889/");
await ws.ConnectAsync(serverUri, CancellationToken.None);
while (ws.State == WebSocketState.Open)
{
Console.Write("Input message ('exit' to exit): ");
string msg = Console.ReadLine();
if (msg == "exit")
{
break;
}
ArraySegment<byte> bytesToSend = new ArraySegment<byte>(Encoding.UTF8.GetBytes(msg));
await ws.SendAsync(bytesToSend, WebSocketMessageType.Text, true, CancellationToken.None);
ArraySegment<byte> bytesReceived = new ArraySegment<byte>(new byte[1024]);
WebSocketReceiveResult result = await ws.ReceiveAsync(bytesReceived, CancellationToken.None);
Console.WriteLine(Encoding.UTF8.GetString(bytesReceived.Array, 0, result.Count));
}
}
}
Хотя это работает так, как ожидалось, мне было интересно, есть ли способ использовать встроенные потоки/чтения в .NET с ClientWebSocket?
Мне кажется странным, что у Microsoft есть этот богатый, хорошо установленный набор потоков и классов читателей, но затем решает внедрить ClientWebSocket только с возможностью читать блоки байтов, которые нужно обрабатывать вручную.
Предположим, что я хотел перенести xml, мне было бы просто просто переносить поток сокета в XmlTextReader, но это не очевидно с ClientWebSocket.