前言:

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#客户端都是应用单例模式,下面的是我封装的类:

  1. public class MqttClientService
  2. {
  3.  
  4. private static volatile MqttClientService _instance = null;
  5.  
  6. private static readonly object LockHelper = new object();
  7.  
  8. /// <summary>
  9. /// 创建单例模式
  10. /// </summary>
  11. /// <param name="ipAddress"></param>
  12. /// <returns></returns>
  13. public static MqttClientService CreateInstance(string ipAddress)
  14. {
  15. if (_instance == null)
  16. {
  17. lock (LockHelper)
  18. {
  19. if (_instance == null)
  20. _instance = new MqttClientService(ipAddress);
  21. }
  22. }
  23. return _instance;
  24. }
  25.  
  26. /// <summary>
  27. /// 实例化订阅客户端
  28. /// </summary>
  29. public MqttClient SubscribeClient { get; set; }
  30.  
  31. public Action<Object, MqttMsgPublishEventArgs> ClientPublishReceivedAction { get; set; }
  32.  
  33. public MqttClientService(string ipAddress)
  34. {
  35. // create client instance
  36. SubscribeClient = new MqttClient(IPAddress.Parse(ipAddress));
  37.  
  38. // register to message received
  39. SubscribeClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
  40.  
  41. string clientId = Guid.NewGuid().ToString();
  42.  
  43. SubscribeClient.Connect(clientId);
  44.  
  45. // subscribe to the topic "/home/temperature" with QoS 2
  46. SubscribeClient.Subscribe(new string[] { "avatar/uploaded" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
  47. }
  48.  
  49. void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
  50. {
  51. // handle message received
  52. ClientPublishReceivedAction.Invoke(sender, e);
  53. }
  54.  
  55. public void client_MqttMsgPublish(string publishString)
  56. {
  57. SubscribeClient.Publish("avatar/signed", Encoding.UTF8.GetBytes(publishString), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
  58. }
  59. }

用户只需要把订阅的路径写到Subscribe即可。

  1.  

C# 接受MQTT服务器推送的消息的更多相关文章

  1. HTML5服务器推送消息的各种解决办法

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

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

    HTML5服务器推送消息的各种解决办法,html5服务器 摘要 在各种BS架构的应用程序中,往往都希望服务端能够主动地向客户端推送各种消息,以达到类似于邮件.消息.待办事项等通知. 往BS架构本身存在 ...

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

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

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

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

  5. [wxpusher]分享一个服务器推送消息到微信上的小工具,可以用于微信推送提醒和告警。

    背景 作为一个程序员,业余搞点自己的东西很正常,一般程序员都会有一两台自己的服务器,谁叫今天xx云搞活动,明天yy云搞活动呢. 自家的服务器用来跑爬虫,跑博客,或者跑一些个人业务,但当服务有新状态,抢 ...

  6. 基于 WebSocket 的 MQTT 移动推送方案

    WebSphere MQ Telemetry Transport 简介 WebSphere MQ Telemetry Transport (MQTT) 是一项异步消息传输协议,是 IBM 在分析了他们 ...

  7. SSE技术详解:一种全新的HTML5服务器推送事件技术

    前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...

  8. 前端通信:SSE设计方案(二)--- 服务器推送技术的实践以及一些应用场景的demo(包括在线及时聊天系统以及线上缓存更新,代码热修复案例)

    距离上一篇博客,这篇文章的发布大概过了整整三个月.我也从饿了么度过了试用期,成为了正式员工.刚进来恰好遇到项目底层改造和迁移,将项目从angular全部迁移到vue上,所以适应这边的节奏和业务的开发任 ...

  9. web前端学习(二)html学习笔记部分(8)--服务器推送事件3

    1.2.22  html5服务器推送事件 1.2.22.1  html5服务器推送事件介绍 服务器推送事件(Server-sent Events)是HTML5规范中的一个组成部分,可以用来从服务器端实 ...

随机推荐

  1. Windows10安装Docker

    一.Docker下载安装 一般情况下,我们可以从Docker官网docker下载安装文件,但是官方网站由于众所周知的原因,不是访问慢,就是下载慢.下载docker安装包动不动就要个把小时,真是极大的影 ...

  2. C/C++ 中嵌入 arm 汇编

    GCC编译器支持直接在C或者C++代码中,嵌入ARM汇编代码.其基本格式非常简单,大致如下: __asm__ [__volatile__] ( assembler template : [output ...

  3. Jenkins : 安装 master 和 slave

    目录 安装 master 安装 slave 设置 master 与 slave 的通信方式 添加 slave 配置 在 salve 上安装 jre 安装并配置 Jenkins salve Jenkin ...

  4. 深度学习论文翻译解析(四):Faster R-CNN: Down the rabbit hole of modern object detection

    论文标题:Faster R-CNN: Down the rabbit hole of modern object detection 论文作者:Zhi Tian , Weilin Huang, Ton ...

  5. [SHOI2006] 有色图

    Description 给一张 \(n\) 个点的无向完全图,同时还有 \(m\) 种颜色.要求给每条边染色,问有多少种不同的染色方案.两种方案不同当且仅当顶点标号任意重排后不同.\(n\leq 53 ...

  6. 自定义Fiddler插件一

    上个月自定义了一个Fiddler的插件,可以根据请求生成接口自动化测试的RF和Python代码,这样测试人员只需要手动操作页面用Fiddler抓取报文,就可以直接生成RF.Python代码,然后只需要 ...

  7. oracle 外连接以及用on和where 的区别

    Oracle  外连接(OUTER JOIN)包括以下: 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/FULL OUT ...

  8. C# 基础运算符及运算

    本节主要讲述运算符的分类及其实际运用 运算符 分类 符号 解释 优先级 算数 ++  -- 加加(加1)  减减(减1) 由高到低,即执行顺序由上到下(圆括号的优先级最高) *  /  % 乘  除  ...

  9. 怎样删除C/C++代码中的所有注释?浅谈状态机的编程思想

    K&R习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不允许嵌套”. 如果不考虑字符常量和字符串常量,问题确实很简单.只 ...

  10. 教你分分钟搞定Python之Flask框架

    用最短的时间开发一个数据操作接口,Python是王道! 一.安装pip .首先检查linux有没有安装python-pip包,终端执行 pip -V [root@ network-scripts]# ...