WTM 增加Mqtt Service 的方法

        wtm 的netcore web中 增加一个MQTT服务,这样如果后端数据想要快速的绕过 API的限制 达到前端 就成为了可能,一些不敏感的数据可以如此下放到客户端,或者页面通过MQTT数据来着展示数据成为可能。有的宝宝就好奇了,说“MQTT是TCP协议, 你弄个网页websocket协议 这都不通 你怎么做到的?”

         哈哈哈,这就是做到了,并且还很好用,接下来你试试就知道了,全网也没几个能理解的(吹牛了哈。。。)

        接下来就看看如何实现(netcore 3.1项目):

第一步,首先给WTM项目应用一个nuget包 mqttnet 

 第二部,关键来了,开始写代码:

  public static IHostBuilder CreateWebHostBuilder(string[] args)
        {

            return
                Host.CreateDefaultBuilder(args)
                .ConfigureLogging((hostingContext, logging) =>
                {
                    logging.ClearProviders();
                    logging.AddConsole();
                    logging.AddDebug();
                    logging.AddWTMLogger();
                })
                 .ConfigureWebHostDefaults(webBuilder =>
                 {
                     webBuilder.ConfigureServices(x =>
                    {
                        x.AddFrameworkService();
                        x.AddMqttTcpServerAdapter();
                        x.AddHostedMqttServer()
                         .AddMqttConnectionHandler()
                         .AddConnections();
                        x.AddCors(options =>
                        {
                            options.AddPolicy("mqtt", builder =>
                            {
                                builder.AllowAnyOrigin() //允许任何来源的主机访问
                                                         //builder.WithOrigins("http://localhost:8080") 允许http://localhost:8080的主机访问
                                .AllowAnyMethod()
                                .AllowAnyHeader();
                                //.AllowCredentials();//指定处理cookie
                            });
                        });
                        x.AddCors(options =>
                        {
                            options.AddPolicy("all", builder =>
                            {
                                builder.SetIsOriginAllowed(_ => true) //允许任何来源的主机访问
                                .AllowAnyMethod()
                                .AllowAnyHeader()
                                .AllowCredentials();//指定处理cookie
                            });
                        });
                        x.AddLayui();
                        x.AddSwaggerGen(c =>
                        {
                            c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
                            var bearer = new OpenApiSecurityScheme()
                            {
                                Description = "JWT Bearer",
                                Name = "Authorization",
                                In = ParameterLocation.Header,
                                Type = SecuritySchemeType.ApiKey

                            };
                            c.AddSecurityDefinition("Bearer", bearer);
                            var sr = new OpenApiSecurityRequirement();
                            sr.Add(new OpenApiSecurityScheme
                            {
                                Reference = new OpenApiReference
                                {
                                    Type = ReferenceType.SecurityScheme,
                                    Id = "Bearer"
                                }
                            }, new string[] { });
                            c.AddSecurityRequirement(sr);
                        });
                        x.AddSpaStaticFiles(configuration =>
                        {
                            configuration.RootPath = "ClientApp/dist";
                        });
                    });
                     webBuilder.Configure(x =>
                     {
                        var env = x.ApplicationServices.GetService<IWebHostEnvironment>();
                        x.UseSwagger();
                        x.UseCors("all");
                        x.UseCors("mqtt");
                        x.UseMqttEndpoint("/mqtt");
                        x.UseMqttServer(server =>
                         {
                             server.StartedHandler = new MqttServerStartedHandlerDelegate(async args =>
                             {
                             });
                             server.ClientConnectedHandler = new MqttServerClientConnectedHandlerDelegate(async args =>
                             {
                                 Console.WriteLine(args.ClientId.ToString());


                             });
                         }

                             x.UseSwaggerUI(c =>
                        {
                            c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                        });
                        if (env.IsDevelopment())
                        {
                            x.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
                            {
                                HotModuleReplacement = false,
                                ConfigFile = "config/webpack.dev.js",
                                ProjectPath = System.IO.Path.Combine(env.ContentRootPath, "ClientApp/")

                            });
                        }
                        x.UseSpaStaticFiles();
                        x.UseFrameworkService();
                     });
                    }
                 );
        }

不得不说WTM真是方便,在webBuilder.ConfigureServices 和webBuilder.Configure里边增加MQTT对应的配置就好了。至于端口什么的我就不详细说了,目前只是在http端口有效。IIS express 和 host self 都支持运行。

        下边这个就是在实验过程中做的一个页面,给展示一下用WTM跑起来的一个页面中订阅了WTM后台咱们增加的MQTT服务,他可以订阅到 后台设备提供的 温湿度 和PM25 等:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值