zoukankan      html  css  js  c++  java
  • 在WPF中集成SuperSocket 2.0

    本文在.Net5环境下,在WPF项目中集成SuperSocket(V2.0.0-beta.10),以便使WPF程序拥有Socket服务器能力。

    本文假设读者具有在.Net5控制台程序中使用SuperSocket 2.0的能力,因此服务器相关设置不再介绍。

    1、创建托管服务器主机

    参考在.Net5控制台程序中使用SuperSocket 2.0,将其创建主机的代码复制过来即可。

    public interface ISocketServerService
    {
        void Startup();
        void Shutdown();
    }
    
    public class SocketServerService : ISocketServerService
    {
        private readonly IHost _host;
        private readonly ILogService _logService;
    
        public SocketServerService(ILogService logService)
        {
            _logService = logService;
    
            //创建宿主:用Package类型和PipelineFilter类型创建SuperSocket宿主。
            _host = SuperSocketHostBuilder.Create<MyPackageInfo, MyPipelineFilter>()
                //注入Service
                .UseHostedService<MyService<MyPackageInfo>>()
                //注入Session
                .UseSession<MySession>()
                //注入命令
                .UseCommand((commandOptions) =>
                {
                    commandOptions.AddCommand<MyCommand>(); //数据命令
                })
                //启用Session容器
                .UseInProcSessionContainer()
                //配置日志
                .ConfigureLogging((hostCtx, loggingBuilder) => { loggingBuilder.SetMinimumLevel(LogLevel.Warning); })
                .Build();
        }
    
        public void Startup()
        {
            try
            {
                _host.StartAsync().GetAwaiter();
            }
            catch (Exception e)
            {
                _logService.Error($"启动SocketServer失败:{e.Message}.");
            }
        }
    
        public void Shutdown()
        {
            try
            {
                _host.StopAsync().GetAwaiter().GetResult();
            }
            catch (Exception e)
            {
                _logService.Error($"关闭SocketServer失败:{e.Message}.");
            }
            finally
            {
                _host.Dispose();
            }
        }
    }

    2、添加配置文件appsettings.json

    注意将其属性设置为:“生成操作”-“无”,“复制到输出目录”-“如果较新则复制”/”始终复制”。

    下面的配置仅添加了IP和端口的参数作为示例。

    {
      "serverOptions": {
        "name": "MyServer",
        "listeners": [
          {
            "ip": "Any",
            "port": "2021"
          }
        ]
      }
    }

    3、使用方法

    ISocketServerService socketServerService = new SocketServerService(logService);
    //启动Socket服务器
    socketServerService.Startup();
    //关闭Socket服务器
    socketServerService.Shutdown();

    4、注意事项

    关闭Socket服务器时,如果不对IHost对象调用Dispose方法,SuperSocket不会真正关闭,导致WPF进程无法正常退出。

  • 相关阅读:
    【WEBAPI】Passing multiple POST parameters to Web API Controller Methods
    【WEBAPI】常用参数传递方法总结
    JavaScript面向对象静态方法私有方法公有方法特权方法
    javascript 封装
    javascript 获取 浏览器body高宽
    Fiddler 教程
    预加载下一张图片
    div页面居中
    关于模块化加载
    chrome本地不能操作iframe
  • 原文地址:https://www.cnblogs.com/xhubobo/p/15337363.html
Copyright © 2011-2022 走看看