WebSocket简介
WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得客户端和服务器之间可以实时双向传输数据,而不需要频繁地建立和关闭连接,WebSocket在.NET中的实现主要依赖于System.Net.WebSockets命名空间。
安装WebSocket库
在使用WebSocket之前,需要先安装相应的库,在项目中,可以通过NuGet包管理器来安装Microsoft.AspNetCore.WebSockets包。
创建WebSocket服务器
1、引入命名空间:
using System; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks;
2、创建一个WebSocket服务器类:
public class WebSocketServer { private readonly HttpListener _listener; private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource(); public WebSocketServer(string url) { _listener = new HttpListener(); _listener.Prefixes.Add(url); _listener.Start(); } public async Task Start() { while (!_cancellationTokenSource.IsCancellationRequested) { var context = await _listener.GetContextAsync(); if (context != null && context.RequestType == "CONNECT") { await ProcessRequest(context); } } } private async Task ProcessRequest(HttpListenerContext context) { var webSocketContext = await context.AcceptWebSocketAsync(null); if (webSocketContext != null) { // 处理WebSocket连接请求 await ProcessWebSocketConnection(webSocketContext); } } private async Task ProcessWebSocketConnection(HttpListenerWebSocketContext webSocketContext) { try { // 读取客户端发送的消息并广播给所有连接的客户端 using (var buffer = new byte[1024]) { var bytesRead = await webSocketContext.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); if (bytesRead > 0) { var message = Encoding.UTF8.GetString(buffer, 0, bytesRead); await SendMessageToAllClients(message); } } } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } finally { webSocketContext.Abort(); // 关闭WebSocket连接 } } }
创建WebSocket客户端(HTML页面)
1、引入JavaScript库:<script src="https://cdnjs.cloudflare.com/ajax/libs/sockjsclient/1.5.0/sockjs.min.js"></script>
和 <script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
,这两个库分别用于处理WebSocket连接和消息传递。
2、编写HTML代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF8"> <meta name="viewport" content="width=devicewidth, initialscale=1.0"> <title>WebSocket Client</title> </head> <body> <input type="text" id="message" placeholder="Enter a message..."> <button onclick="sendMessage()">Send</button> <div id="chat"></div> <script> var socket = new SockJS('/ws'); // WebSocket服务器地址,根据实际情况修改 var stompClient = Stomp.over(socket); // 使用STOMP协议处理消息传递,需要先安装stomp.js库(参考上面的步骤) stompClient.connect({}, function (frame) { console.log('Connected: ' + frame); }); // 连接到WebSocket服务器,成功连接后会触发回调函数,打印日志信息到控制台。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/481841.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复