C# 使用IIS 管理WebSocket 通讯

发布时间 2023-11-01 00:43:46作者: 已惯天涯

下面将介绍如何在iis上使用 websocket 。

创建项目

我们需要创建一个 WebApi

打开初始程序中 Program 类的 main 方法,并进行修改

 

添加管理类

创建一个管理类用于管理 WebSocket 的链接

 1 public class WebSocketConnectionManager
 2 {
 3     private Dictionary<string, WebSocket> connections = new Dictionary<string, WebSocket>();
 4     private int onlineUserCount = 0;
 5 
 6     //检测到链接时加入列表
 7     public void AddWebSocket(WebSocket webSocket)
 8     {
 9         string connectionId = Guid.NewGuid().ToString();
10         connections.TryAdd(connectionId, webSocket);
11     }
12 
13     //断开链接时移除列表中数据
14     public void RemoveWebSocket(WebSocket webSocket)
15     {
16         var connection = connections.FirstOrDefault(pair => pair.Value == webSocket);
17         if (!connection.Equals(default(KeyValuePair<string, WebSocket>)))
18         {
19             connections.Remove(connection.Key);
20         }
21     }
22 
23     //获取当前连接数
24     public int GetOnlineUserCount()
25     {
26         return onlineUserCount;
27     }
28 
29     //链接计数器
30     public void IncrementOnlineUserCount()
31     {
32         onlineUserCount++;
33     }
34     public void DecrementOnlineUserCount()
35     {
36         if (onlineUserCount > 0)
37         {
38             onlineUserCount--;
39         }
40     }
41 }
View Code

将管理类以单例的方式添加到服务列表中

方便在控制器中调用,调用方法如下

 1 [ApiController]
 2 [Route("[controller]")]
 3 public class WebSocketController : ControllerBase
 4 {
 5     private readonly WebSocketConnectionManager _webSocketConnectionManager;
 6     public WebSocketController(WebSocketConnectionManager webSocketConnectionManager)
 7     {
 8         _webSocketConnectionManager = webSocketConnectionManager;
 9     }
10 
11     [HttpGet]
12     [Route("ConnectionNum")]
13     public IActionResult ConnectionNum()
14     {
15         int onlineUserCount = _webSocketConnectionManager.GetOnlineUserCount();
16 
17         return Ok("WebSocket API Connect Num - " + onlineUserCount);
18     }
19 }
View Code

在 IIS 中添加 WebSocket