当前位置: 首页 > wzjs >正文

建设网站筛选网站供应商营销型制作网站公司

建设网站筛选网站供应商,营销型制作网站公司,上海网安备案网站,做驾校题目用什么网站好程序作为MQTT的服务端,也是WebApi 接口地址,在Web页面中MQTTJS用的是Websocker协议,在Winfrom中用MQTT协议。导致程序需要启动两个端口。直接上代码 创建服务 引用包:MQTTnet,MQTTnet.AspNetCore,这包最新…

程序作为MQTT的服务端,也是WebApi 接口地址,在Web页面中MQTTJS用的是Websocker协议,在Winfrom中用MQTT协议。导致程序需要启动两个端口。直接上代码

创建服务

引用包:MQTTnet,MQTTnet.AspNetCore,这包最新的5.*,我引用的是4.3.7.1207。5.*的包在接收消息的处理方式略微不同

MqttConfigServer

  public class MqttConfigServer{/// <summary>/// 客户端最大连接数/// </summary>public int MaxPendingPerClient { get; set; }/// <summary>/// Mqtt端口/// </summary>public int MqttPort { get; set; }/// <summary>/// MqttWs端口/// </summary>public int MqttWsPort { get; set; }/// <summary>/// MqttWs路径/// </summary>public string MqttWsPath { get; set; }}

这是拓展的方法,添加mqtt服务
AppInfo.GetOptions() 这是获取配置文件

 /// <summary>/// 添加mqtt服务/// </summary>/// <param name="services"></param>/// <param name="webHostBuilder"></param>public static void AddMqttService(this IServiceCollection services, IWebHostBuilder webHostBuilder){var mqttServerConfig = AppInfo.GetOptions<MqttConfigServer>();webHostBuilder.ConfigureKestrel((context, serverOptions) =>{//配置Mqtt端口serverOptions.ListenAnyIP(mqttServerConfig.MqttPort, options => options.UseMqtt());//配置web端口serverOptions.ListenAnyIP(mqttServerConfig.MqttWsPort);});//配置MQTT服务services.AddHostedMqttServerWithServices(options =>{options.WithoutDefaultEndpoint();options.WithMaxPendingMessagesPerClient(mqttServerConfig.MaxPendingPerClient);options.WithKeepAlive();});services.AddMqttConnectionHandler();services.AddConnections();//注入单例mqtt侦听服务services.AddSingleton<MyMqttService>();}

MyMqttService

public class MyMqttService
{public MyMqttService(){ }public Task Server_ApplicationMessageNotConsumedAsync(ApplicationMessageNotConsumedEventArgs arg){Console.WriteLine($"客户端:【{arg.SenderId}】,主题【{arg.ApplicationMessage.Topic}】收到消息:{System.Text.Encoding.Default.GetString(arg.ApplicationMessage.PayloadSegment)}");return Task.CompletedTask;}/// <summary>/// 客户端验证账号密码/// </summary>/// <param name="arg"></param>/// <returns></returns>public Task Server_ValidatingConnectionAsync(ValidatingConnectionEventArgs arg){Console.WriteLine($"{arg.ClientId} 上线了,{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");return Task.CompletedTask;}/// <summary>/// 侦听所有消息/// </summary>/// <param name="arg"></param>/// <returns></returns>public async Task Server_InterceptingPublishAsync(InterceptingPublishEventArgs arg){Console.WriteLine($"侦听所有消息:【{arg.ClientId}】,主题【{arg.ApplicationMessage.Topic}】收到消息:{System.Text.Encoding.Default.GetString(arg.ApplicationMessage.PayloadSegment)}");await Task.CompletedTask;return;}/// <summary>/// 客户端断开连接/// </summary>/// <param name="arg"></param>/// <returns></returns>public Task Server_ClientDisconnectedAsync(ClientDisconnectedEventArgs arg){Console.WriteLine($"【{arg.ClientId}】 下线了,{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");return Task.CompletedTask;}/// <summary>/// 客户端上线/// </summary>/// <param name="arg"></param>/// <returns></returns>public Task Server_ClientConnectedAsync(ClientConnectedEventArgs arg){Console.WriteLine($"{arg.ClientId} 上线了,{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");return Task.CompletedTask;}/// <summary>/// 客户端取消订阅/// </summary>/// <param name="arg"></param>/// <returns></returns>public Task Server_ClientUnsubscribedTopicAsync(ClientUnsubscribedTopicEventArgs arg){return Task.CompletedTask;}/// <summary>/// 客户端订阅/// </summary>/// <param name="arg"></param>/// <returns></returns>public Task Server_ClientSubscribedTopicAsync(ClientSubscribedTopicEventArgs arg){return Task.CompletedTask;}/// <summary>/// 客户端保留消息/// </summary>/// <param name="arg"></param>/// <returns></returns>public Task Server_RetainedMessageChangedAsync(RetainedMessageChangedEventArgs arg){Console.WriteLine($"收到消息:{arg.ClientId}");return Task.CompletedTask;}
}

在Program 添加mqtt 服务

  //添加Mqtt服务services.AddMqttService(builder.WebHost);var mqttServerConfig = AppInfo.GetOptions<MqttConfigServer>();//WsMqtt 路径app.MapConnectionHandler<MqttConnectionHandler>(mqttServerConfig.MqttWsPath, http => http.WebSockets.SubProtocolSelector = protocolList => protocolList.FirstOrDefault() ?? string.Empty);var mqttService = app.Services.GetRequiredService<MyMqttService>();//加载MQTT回调app.UseMqttServer(server =>{//验证账号密码server.ValidatingConnectionAsync += mqttService.Server_ValidatingConnectionAsync;//侦听为消费消息server.ApplicationMessageNotConsumedAsync += mqttService.Server_ApplicationMessageNotConsumedAsync;//侦听所有消息server.InterceptingPublishAsync += mqttService.Server_InterceptingPublishAsync;//客户端订阅消息server.ClientSubscribedTopicAsync += mqttService.Server_ClientSubscribedTopicAsync;//客户端取消订阅消息server.ClientUnsubscribedTopicAsync += mqttService.Server_ClientUnsubscribedTopicAsync;//客户端链接事件server.ClientConnectedAsync += mqttService.Server_ClientConnectedAsync;//客户端关闭事件server.ClientDisconnectedAsync += mqttService.Server_ClientDisconnectedAsync;//保留消息server.RetainedMessageChangedAsync += mqttService.Server_RetainedMessageChangedAsync;});

mqttconfig

{"maxPendingPerClient": 1000, //客户端最大等待连接数"mqttPort": 1883, //mqtt端口"mqttWsPort": 8083, //mqtt websocket端口"mqttWsPath": "/mqtt" //mqtt websocket路径}

这样服务就完成,这里mqtt 服务并不影响WebApi 的接口,只是启动的两个端口

服务端主动推送消息

 private IServiceProvider _serviceProvider;public ClientControlController(IServiceProvider serviceProvider){_serviceProvider = serviceProvider;}/// <summary>/// 服务端推送消息/// </summary>/// <returns></returns>private async Task PushMsg(string topic, ClientControl control){var server = _serviceProvider.GetService<MqttHostedServer>() as MqttServer;//获取客户端var client = (await server?.GetClientsAsync()).Where(m => m.Id == "HardwareService").FirstOrDefault();//推送消息var payload = JsonConvert.SerializeObject(control);var message = new MqttApplicationMessageBuilder().WithTopic(topic)//主题.WithPayload(payload).Build();if (client != null){await server.InjectApplicationMessage(new InjectedMqttApplicationMessage(message){SenderClientId = client.Id,});}}
http://www.dtcms.com/wzjs/265971.html

相关文章:

  • wordpress css文件路径保定seo推广公司
  • 太原0元网站建设seo推广怎么学
  • 远离有害不良网站应该怎么做百度怎么做自己的网页
  • 政府网站建设 费用站长之家官网登录入口
  • 北京建站公司哪家好小广告多的网站
  • 重庆手机软件开发seo百度快速排名软件
  • wordpress 焦点图大小长春网站快速优化排名
  • 上海做网站那家公司好北京seo优化
  • 网站建设方案书 下载哪个网站学seo是免费的
  • 什么网站服务器好深圳网站提升排名
  • 个人网站静态网页模板seo关键词优化举例
  • 武汉哪家做营销型网站好市场调研报告怎么做
  • 湖北交投建设集团有限公司网站广州网站建设正规公司
  • 怎么自建一个网站网页设计需要学什么
  • seo网站上线前分析bt种子磁力搜索
  • 软件技术毕业设计昆明seo案例
  • 南宁建站程序今天的新闻
  • 网站开发工具seo整体优化
  • 自己做网站要哪些东西口碑营销案例2021
  • 如何做像淘宝一样的网站企业网站推广策划
  • 网站反链一般怎么做爱站网关键词挖掘工具
  • 网站需求文档范例外贸网站推广与优化
  • 网站建设费怎么写会计科目seo优化网站源码
  • 在线做头像的网站seo百度关键词排名
  • 万网如何做网站网络销售工资一般多少
  • 成都高投建设开发有限公司网站百度推广登陆
  • 要解析做邮箱以及网站网络营销品牌推广公司
  • 温州集团网站建设搭建网站平台
  • 开发一个app大概需要多少钱?外包seo服务收费标准
  • 大学培训中心网站建设广告公司营销策划方案