前言:

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服务器推送的消息相关推荐

  1. 服务器推送消息方法总结及实现(java)

    服务器推送消息方法总结及实现(java) 最近在进行web开发时,有用到服务端推送消息这个功能,相信大家在平常开发时,也经常会有这种需求.本文对常用的几种服务器推送消息方法进行整理和总结,并实现使用流 ...

  2. 服务器推送技术的研究与应用

    3.1服务器推送技术(Server Push) 3.1.1服务器推送技术概述 服 务器推送技术是最近Web技术中最热门的一个流行术语,它是继AJAX之后又一个倍受追捧的Web技术.我们可以认为AJAX ...

  3. 服务器推送信息到客户端,服务器如何发送消息到客户端

    服务器如何发送消息到客户端 内容精选 换一换 使用SSH方式登录CentOS 6.5操作系统的弹性云服务器时,过一段时间就会自动断开连接.本节操作介绍如何保持SSH会话持续连接不断开该文档适用于Cen ...

  4. html5服务器推送消息的各种解决办法,WEB服务器推送消息的各种解决办法

    前言:在各种BS架构的应用程序中,往往都希望服务端能够主动地向客户端推送各种消息,以达到类似于邮件.消息.待办事项等通知.而BS架构本身存在的问题就是,服务器一直采用的是一问一答的机制.这就意味着如果 ...

  5. HTTP Websocket 服务器推送消息

    文章目录 HTTP HTTP请求过程 1. 无状态 2. 基于TCP协议 心跳包 3. 长.短连接 4. 单向请求 传统服务器推送技术 短轮询 polling 同源限制 跨域资源共享 长轮询 long ...

  6. Python Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样实现最方便呢?我这里推荐大家使用GoEasy,它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持we ...

  7. C# Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持w ...

  8. ASP.NET Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用ASP.NET实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEa ...

  9. C# Web实时消息后台服务器推送技术-GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用C#实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

最新文章

  1. Activiti 笔记
  2. 揭秘丨“北京八分钟”里中国制造的科技力量
  3. zabbix开启报警声音 网页也可以有声音
  4. matlab 低秩矩阵分解,低秩分解的matlab代码看不懂,分解的两个矩阵在哪呀??...
  5. 计算 的程序java_数学表达式计算程序(java)
  6. 直播 | CVPR 2021论文解读:引入因果结构的解耦表征学习
  7. 一个人的Scrum之准备工作
  8. oracle socct用户,oracle 19c 添加 scott用户与表
  9. DB-Engines 2019 年度数据库出炉:MySQL 成为年度数据库赢家
  10. linux 查看内存和cup使用率
  11. express中 routes/index.js
  12. 卡巴斯基安全部队2013 卡巴斯基正式版 送一年使用序列号
  13. 在深圳,考PMP需要花费多少钱?
  14. Feign集成Hystric报错
  15. PotPlayer设置最小化的快捷键
  16. SQL Server AlwaysOn部署
  17. C++查询文本中所有单词出现的频率,并且根据出现次数由多到少依次排列。
  18. java 模板生成PDF文件 复选框勾选
  19. 苹果手机usb共享网络连接ubuntu连接不上解决方案
  20. android 源码下载

热门文章

  1. JavaScript 学习提升
  2. Dubbo源码解析之Zookeeper连接
  3. 云应用基础技术成熟需七年时间
  4. 《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.9 打包和混合纹理
  5. 【数据库中间件】MyCat分表分库规则实现
  6. easyui 排序实现
  7. Maven搭建SpringMVC+Mybatis项目详解【转】
  8. 这是Blazor上传文件的最佳方式吗?
  9. [探索 .NET 6]01 揭开 ConfigurationManager 的面纱
  10. 违反GPL协议,法院判罚了!国内首例