websocket 长链
时间: 2024-05-15 18:11:42 浏览: 150
WebSocket 长连接指的是客户端与服务器之间建立的一种持久化的双向通信的连接。相比传统的 HTTP 连接,WebSocket 长连接具有以下优点:
1. 无需频繁建立连接和断开连接,减少了建立连接和断开连接的开销,提高了性能和效率;
2. 可以在客户端和服务器之间实时地双向传输数据,实现了真正意义上的实时通信;
3. WebSocket 长连接是基于 TCP 连接的,相比于 HTTP 连接,WebSocket 长连接更加稳定可靠。
在 C# 中,你可以使用 System.Net.WebSockets 命名空间提供的类来实现 WebSocket 长连接。具体实现方式可以参考以下代码:
```
using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
public class WebSocketExample
{
public static async Task Connect(string uri)
{
ClientWebSocket webSocket = null;
try
{
webSocket = new ClientWebSocket();
await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
Console.WriteLine("WebSocket connected!");
await Task.WhenAll(Receive(webSocket), Send(webSocket));
}
catch (Exception ex)
{
Console.WriteLine($"Exception: {ex.Message}");
}
finally
{
webSocket?.Dispose();
Console.WriteLine("WebSocket disconnected!");
}
}
private static async Task Send(ClientWebSocket webSocket)
{
while (webSocket.State == WebSocketState.Open)
{
string message = Console.ReadLine();
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(message);
await webSocket.SendAsync(new ArraySegment<byte>(bytes), WebSocketMessageType.Text, true, CancellationToken.None);
}
}
private static async Task Receive(ClientWebSocket webSocket)
{
byte[] buffer = new byte[1024];
while (webSocket.State == WebSocketState.Open)
{
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Text)
{
string message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine($"Received message: {message}");
}
}
}
}
```
以上代码实现了一个简单的客户端,通过 Connect 方法连接到指定的 WebSocket 服务器,并实现了发送和接收数据的功能。如果你想要实现 WebSocket 服务器端,你可以使用 System.Net.WebSockets 命名空间提供的类来实现。
阅读全文