C# 接受MQTT服务器推送的消息
前言:
MQTT是IBM开发的一个即时通讯协议。MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制。
大家可以直接上GitHub下载MQQT服务的源码,源码地址:https://github.com/mqtt/mqtt.github.io/wiki/libraries
主要内容:
官方文档翻译:
M2Mqtt库提供了一个主类MqttClient,代表连接到代理的MQTT客户端。您可以连接到提供其IP地址或主机名的代理,以及可选的与MQTT协议相关的一些参数。
连接到代理后,您可以使用Publish()方法向主题和Subscribe()方法发布消息以订阅主题并接收其上发布的消息。
MqttClient类是基于事件,以便您在邮件发布到您订阅的主题时收到一个事件。消息发布完成后,您可以收到事件,您已订阅或取消订阅主题。
以客户端为主题的例子:
...
// create client instance
MqttClient client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS));
// register to message received
client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
string clientId = Guid.NewGuid().ToString();
client.Connect(clientId);
// subscribe to the topic "/home/temperature" with QoS 2
client.Subscribe(new string[] { "/home/temperature" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
...
static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
// handle message received
}
一般C#客户端都是应用单例模式,下面的是我封装的类:
public class MqttClientService
{
private static volatile MqttClientService _instance = null;
private static readonly object LockHelper = new object();
/// <summary>
/// 创建单例模式
/// </summary>
/// <param name="ipAddress"></param>
/// <returns></returns>
public static MqttClientService CreateInstance(string ipAddress)
{
if (_instance == null)
{
lock (LockHelper)
{
if (_instance == null)
_instance = new MqttClientService(ipAddress);
}
}
return _instance;
}
/// <summary>
/// 实例化订阅客户端
/// </summary>
public MqttClient SubscribeClient { get; set; }
public Action<Object, MqttMsgPublishEventArgs> ClientPublishReceivedAction { get; set; }
public MqttClientService(string ipAddress)
{
// create client instance
SubscribeClient = new MqttClient(IPAddress.Parse(ipAddress));
// register to message received
SubscribeClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
string clientId = Guid.NewGuid().ToString();
SubscribeClient.Connect(clientId);
// subscribe to the topic "/home/temperature" with QoS 2
SubscribeClient.Subscribe(new string[] { "avatar/uploaded" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
}
void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
// handle message received
ClientPublishReceivedAction.Invoke(sender, e);
}
public void client_MqttMsgPublish(string publishString)
{
SubscribeClient.Publish("avatar/signed", Encoding.UTF8.GetBytes(publishString), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
}
}
用户只需要把订阅的路径写到Subscribe即可。
相关文章:
使用 MQTTnet 快速实现 MQTT 通信
原文地址: https://www.cnblogs.com/dongqinnanren/p/6839319.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
C# 接受MQTT服务器推送的消息相关推荐
- 服务器推送消息方法总结及实现(java)
服务器推送消息方法总结及实现(java) 最近在进行web开发时,有用到服务端推送消息这个功能,相信大家在平常开发时,也经常会有这种需求.本文对常用的几种服务器推送消息方法进行整理和总结,并实现使用流 ...
- 服务器推送技术的研究与应用
3.1服务器推送技术(Server Push) 3.1.1服务器推送技术概述 服 务器推送技术是最近Web技术中最热门的一个流行术语,它是继AJAX之后又一个倍受追捧的Web技术.我们可以认为AJAX ...
- 服务器推送信息到客户端,服务器如何发送消息到客户端
服务器如何发送消息到客户端 内容精选 换一换 使用SSH方式登录CentOS 6.5操作系统的弹性云服务器时,过一段时间就会自动断开连接.本节操作介绍如何保持SSH会话持续连接不断开该文档适用于Cen ...
- html5服务器推送消息的各种解决办法,WEB服务器推送消息的各种解决办法
前言:在各种BS架构的应用程序中,往往都希望服务端能够主动地向客户端推送各种消息,以达到类似于邮件.消息.待办事项等通知.而BS架构本身存在的问题就是,服务器一直采用的是一问一答的机制.这就意味着如果 ...
- HTTP Websocket 服务器推送消息
文章目录 HTTP HTTP请求过程 1. 无状态 2. 基于TCP协议 心跳包 3. 长.短连接 4. 单向请求 传统服务器推送技术 短轮询 polling 同源限制 跨域资源共享 长轮询 long ...
- Python Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样实现最方便呢?我这里推荐大家使用GoEasy,它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持we ...
- C# Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持w ...
- ASP.NET Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样用ASP.NET实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEa ...
- C# Web实时消息后台服务器推送技术-GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样用C#实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...
最新文章
- Activiti 笔记
- 揭秘丨“北京八分钟”里中国制造的科技力量
- zabbix开启报警声音 网页也可以有声音
- matlab 低秩矩阵分解,低秩分解的matlab代码看不懂,分解的两个矩阵在哪呀??...
- 计算 的程序java_数学表达式计算程序(java)
- 直播 | CVPR 2021论文解读:引入因果结构的解耦表征学习
- 一个人的Scrum之准备工作
- oracle socct用户,oracle 19c 添加 scott用户与表
- DB-Engines 2019 年度数据库出炉:MySQL 成为年度数据库赢家
- linux 查看内存和cup使用率
- express中 routes/index.js
- 卡巴斯基安全部队2013 卡巴斯基正式版 送一年使用序列号
- 在深圳,考PMP需要花费多少钱?
- Feign集成Hystric报错
- PotPlayer设置最小化的快捷键
- SQL Server AlwaysOn部署
- C++查询文本中所有单词出现的频率,并且根据出现次数由多到少依次排列。
- java 模板生成PDF文件 复选框勾选
- 苹果手机usb共享网络连接ubuntu连接不上解决方案
- android 源码下载