【发布时间】:2016-12-19 09:59:47
【问题描述】:
我目前正在研究使用 websockets 在客户端/代理和服务器之间进行通信,并决定为此使用 C#。虽然我之前使用过 Websockets 和 C#,但这是我第一次同时使用两者。第一次尝试使用以下指南: 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 并不明显。
【问题讨论】:
-
开始使用 SignalR
-
SignalR 实际上有很多问题。一直很不靠谱。也许我遇到的最大问题是,如果不强制客户端进行更新,就无法升级服务器 SignalR 版本。这并不总是一件好事。