在ASP.NET Core Web API中使用SuperSocket.WebSocket.Server
2022/4/13 17:12:27
本文主要是介绍在ASP.NET Core Web API中使用SuperSocket.WebSocket.Server,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
使用SuperSocket做WebSocket服务器开发需要引用包SuperSocket.WebSocket.Server,本文简称SuperWebScoket。
本文环境为.Net5 + ASP.Net Core Web API + SuperSocket.WebSocket.Server 2.0.0-beta.10,介绍了如何在在.NetCore WebAPI中使用SuperWebScoket的方法,以及如何启动WebSocket。
本文假设读者具有.NetCore Web API及SuperWebScoket的使用经验。
1、创建自定义WebScoket服务
WebScoket服务主要对WebScoket的配置进行设置,使用了内存配置代替传统的配置文件,通过在WebAPI项目中设置WebScoket端口,实现了端口的动态配置。
此外,参考《在WPF中集成SuperSocket 2.0》,WebScoket服务也在关闭IHost时执行了Dispose方法。不过,作为服务端程序,WebScoket服务一般不会关闭,直到所在的进程退出。
public interface IWebSocketServerService { Task Startup(); Task Shutdown(); } public class WebSocketServerService : IWebSocketServerService { private IHost _host; private readonly ILogger<WebSocketServerService> _logger; private readonly int _port; public WebSocketServerService(ILogger<WebSocketServerService> logger, IConfiguration configuration) { _logger = logger; var port = configuration["WebSocketServer:Port"]; if (!int.TryParse(port, out _port)) { _port = 6666; _logger.LogWarning($"读取WebSocketServerPort失败,默认监听端口{_port}."); } } public async Task Startup() { try { _host = WebSocketHostBuilder.Create() //注册WebSocket消息处理器 .UseWebSocketMessageHandler(async (session, package) => { Console.WriteLine($@"{DateTime.Now:yyyy-MM-dd HH:mm:ss fff} Receive message: {package.Message}."); //Send message back var message = $@"{DateTime.Now:yyyy-MM-dd HH:mm:ss fff} Hello from WebSocket Server: {package.Message}."; await session.SendAsync(message); }) .ConfigureAppConfiguration((hostCtx, configApp) => { configApp.AddInMemoryCollection(new Dictionary<string, string> { {"serverOptions:name", "NwMesServer"}, {"serverOptions:listeners:0:ip", "Any"}, {"serverOptions:listeners:0:port", $"{_port}"} }); }) .ConfigureLogging((hostCtx, loggingBuilder) => { //添加控制台输出 loggingBuilder.AddConsole(); }) .Build(); await _host.RunAsync(); } catch (Exception e) { _logger.LogError($"启动WebSocketServer失败:{e.GetMessageWithInnerException()}."); } } public async Task Shutdown() { try { await _host.StopAsync(); } catch (Exception e) { _logger.LogError($"关闭WebSocketServer失败:{e.Message}."); } finally { _host.Dispose(); } } }
2、注册WebScoket服务
在Startup.cs的ConfigureServices方法中注入即可。
public void ConfigureServices(IServiceCollection services) { //注入服务 services.AddScoped<IMd5Service, Md5Service>(); services.AddSingleton<IWebSocketServerService, WebSocketServerService>(); }
3、启动WebSocket服务
在Startup.cs的Configure方法中启动WebScoket服务。
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ... app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); //启动WebSocket服务 var webSocketServerService = app.ApplicationServices.GetService<IWebSocketServerService>(); await webSocketServerService.Startup(); }
这篇关于在ASP.NET Core Web API中使用SuperSocket.WebSocket.Server的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统