服务端实现
在Startup.cs的文件中的Configure方法里面设置如下代码:.
1app.UseEndpoints(endpoints =>
2 {
3 endpoints.MapControllers();
4 // 映射 /ws 路径
5 // 对请求上下文进行操作
6 endpoints.Map("/ws", async context =>
7 {
8 var buffer = new byte[1024*2]; // 创建接受传输的字符变量
9 var websocket = await context.WebSockets.AcceptWebSocketAsync(); // 接收通信 建立链接
10 _lists.Add(websocket); // 获取一个客户端就添加到集合里面
11
12 var result =await websocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); // 开始接收
13 var i = 0;
14 while(!result.CloseStatus.HasValue)
15 {
16 var message = Encoding.UTF8.GetBytes($"{i++}");
17 foreach (var item in _lists)
18 {
19 // 未闭合链接 服务端
20 await item.SendAsync(new ArraySegment<byte>(message, 0, message.Length), result.MessageType,result.EndOfMessage, CancellationToken.None);
21 }
22 var da = await websocket.ReceiveAsync(new ArraySegment<byte>(buffer),CancellationToken.None); // 开始接收 双重
23 Console.WriteLine(buffer[i]);
24 }
25 // 断开链接
26 await websocket.CloseAsync(result.CloseStatus.Value, "Close", CancellationToken.None);
27 _lists.Remove(websocket);
28 });
29 });
客户端实现
1 <script>
2 // 建立链接
3 const socket = new WebSocket("ws://localhost:5000/ws");
4 var i = 0;
5 // 注意 "一定是open" 不然链接无法建立发送数据
6 socket.addEventListener("open", (event) => {
7 socket.send("opensss");
8 setInterval(function() {
9 socket.send(`${i++}`)
10 }, 2000)
11 });
12 socket.addEventListener("message", (event) => {
13 console.log(`data received:${event.data}`);
14 });
15 </script>
配置
1// .net core 中启动中间件
2app.UseWebSockets(new WebSocketOptions() {KeepAliveInterval = TimeSpan.FromSeconds(30) });
会以Signalr为一个专题进行分享,没玩过的朋友感兴趣的话可以随时关注,获取源码一起实操呀~