首页 > 其他分享 >.net6搭建websocket

.net6搭建websocket

时间:2023-06-30 11:12:27浏览次数:43  
标签:WebSocket 连接 connections result net6 websocket 搭建 public webSocket

当使用.NET 6构建WebSocket微服务时,可以按照以下步骤进行操作:

1. 创建新的.NET 6项目:打开适用于.NET 6的IDE(如Visual Studio 2022或Visual Studio Code),创建一个新的空白项目。

.net6默认引入了Microsoft.AspNetCore.WebSockets 2,3步骤省略

2. 添加WebSocket支持:确保项目引用了`Microsoft.AspNetCore.WebSockets`包。可以通过NuGet包管理器或添加`<PackageReference>`到项目文件(.csproj)中来完成引用。

3. 配置Startup类:在项目中创建一个名为`Startup.cs`的类,并配置WebSocket支持。在`ConfigureServices`方法中,添加以下代码来启用WebSocket支持:

public void ConfigureServices(IServiceCollection services)
{
services.AddWebSocket();
}

 

4. 添加WebSocket控制器:在项目中创建一个名为`WebSocketController.cs`的类,并继承`ControllerBase`。在该控制器中,添加以下代码来处理WebSocket连接和消息:

 

 

5. 创建WebSocket处理程序:在项目中创建一个名为`WebSocketHandler.cs`的类,并实现处理WebSocket连接和消息的逻辑。

public class WebSocketHandler
{
private readonly WebSocketConnections _connections;

public WebSocketHandler(WebSocketConnections connections)
{
_connections = connections;
}

public async Task HandleConnection(WebSocket webSocket)
{
// 添加WebSocket连接到连接管理器
_connections.Add(webSocket);

try
{
byte[] buffer = new byte[1024];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);

while (!result.CloseStatus.HasValue)
{
// 处理接收到的消息
string message = Encoding.UTF8.GetString(buffer, 0, result.Count);
await ProcessMessage(message);

// 继续接收下一个消息
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
}

// 关闭WebSocket连接
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}
finally
{
// 从连接管理器中移除WebSocket连接
_connections.Remove(webSocket);
}
}

private async Task ProcessMessage(string message)
{
// 处理接收到的消息逻辑

//在这里增加
// ...
}
}

 发送给指定用户

 

6. 配置WebSocket连接管理器:在项目中创建一个名为`WebSocketConnections.cs`的类,用于管理WebSocket连接。

以下是一个简单的实现示例:


public class WebSocketConnections
{
private readonly List<WebSocket> _connections = new List<WebSocket>();

public void Add(WebSocket webSocket)
{
_connections.Add(webSocket);
}

public void Remove(WebSocket webSocket)
{


_connections.Remove(webSocket);
}

public async Task SendToAll(string message)
{
var buffer = Encoding.UTF8.GetBytes(message);
foreach (var connection in _connections)
{
await connection.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
}
}
}
```其中可创建两个字典集合用于储存在连接的信息,做后续拓展

 

7. 配置WebSocket路由:在`Configure`方法中,添加WebSocket路由配置。在`Startup.cs`文件的`Configure`方法中,添加以下代码:

app.UseWebSockets();
app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});

8. 启动微服务:在适用于.NET 6的IDE中启动项目,WebSocket微服务将在指定的URL上监听WebSocket连接。

现在,你已经创建了一个基本的WebSocket微服务。你可以通过访问`ws://yourserveraddress/ws`来建立WebSocket连接,并处理接收到的消息。根据你的需求,你可以进一步扩展WebSocket处理程序和控制器来满足特定的业务需求。

标签:WebSocket,连接,connections,result,net6,websocket,搭建,public,webSocket
From: https://www.cnblogs.com/zzhsmallblog/p/17516099.html

相关文章

  • 海外视频直播源码技术视频直播间的搭建
        在科技日渐发达的当今,网络将天南海北的连接到了一起,让人们之间的距离缩短,这其中就有一个技术它既把人们聚在一起,又可以让人们在其中进行社交,这个技术是什么那?听我往下面说。在一个源码平台中,有这么一个房间,他由一个人进行开始并主持,进入房间几乎没有限制,但大部分人都作......
  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(8)-Ant Design Blazor前端
    前言前面的章节我们介绍了一些值得推荐的BlazorUI组件库,通过该篇文章的组件库介绍最终我选用AntDesignBlazor这个UI框架作为ToDoList系统的前端框架。因为在之前的工作中有使用过AntDesignVue、AntDesignAngular习惯并且喜欢AntDesign设计规范和风格,废话不多说今天我......
  • 内网使用postman测试websocket接口(无法登录的情况下)
    postman测试websocket接口。但是发现老版本的postman不支持websocket接口的测试。于是直接上最新版本postman。打开postman,new,选择websocket。发现选不了,提示:youneedtobeinaworkspacetoperformthisaction.然后我去工作台,发现强制要登录!!!但是问题在于:我这公司电脑不......
  • redis cluster集群搭建
    redis6.2使用docker搭建rediscluster集群(3主3从)所有的操作都在根目录~/Developer/docker-compose/redis-cluster-6.2执行创建配置文件为了方便,写了个shell脚本,懒人必备createConfig.shforportin$(seq63816386);doconf_dir=./${port}/confconf_file=$......
  • react保姆级搭建新项目
    此文主要以ts+vite+router6+antd快速搭建一个react项目,适用于初学者一、项目搭建采用pnpm,个人感觉比npm和yarn好用npmipnpm-g采用vite方式,根据选择react-tspnpmcreatevite1.1修改初始结构,删除多余文件1.2修改vite.config配置文件配置别名vite.config:import{defineC......
  • NET6的net6.0-windows10.xxx文件夹
    通常使用.NET6生成window程序默认在bin下会生成对应系统的net6.0-windows10.xxxx之类的文件夹。如果不喜欢的可以在项目文件中编辑增加<PropertyGroup><AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath></PropertyGroup> ......
  • Flutter私服搭建之package查询
    温馨提示:这是一篇私有的package客户端查询的平台搭建文章,牵扯到python中的Django框架,虽和Flutter相关,但客户端的代码并没有关联,请您根据需要进行阅读。公有的package,对于一个Flutter开发者而言,再熟悉不过,比如常见的网络库dio,存储库shared_preferences等等,我们都可以在官网进行查找......
  • pytest接口自动化测试框架搭建的全过程
    pytest是Python的一种单元测试框架,可用来组织用例执行,用例断言,下面这篇文章主要给大家介绍了关于pytest接口自动化测试框架搭建的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下一.背景Pytest目前已经成为Python系自动化测试必学必备的一个框架,网上也有很多......
  • Day05 5.1 Java环境搭建
    Day055.1Java环境搭建【一】Jdk的安装和配置【1】安装jdk是否需要再选择安装一个额外的JRE。这是可选的,因为之前安装的JDK中,已经包含了开发环境和JRE运行环境两部分,所以不必再安装一个JRE。【2】配置环境变量(1)新建JAVA_HOMEJAVA_HOMED:\ProgramFiles\Java\jdk-1......
  • 嵌入式-Qt开发环境搭建
    1.什么是QTSDK,QT,QTCreator(1)QTSDK包括QT库,QTCreator(IDE),QT工具(qmake等,qmake用于生产Makefile)(2)QT是基于C++的跨平台的应用程序框架,可以认为是一个库文件(3)QTCreator一款IDE2.搭建嵌入式-QT开发环境需要什么(1)QTCreator 一般在虚拟机的Li......