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

 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
32         public Action<Object, MqttMsgPublishEventArgs> ClientPublishReceivedAction { get; set; }
33
34         public MqttClientService(string ipAddress)
35         {
36             // create client instance
37             SubscribeClient = new MqttClient(IPAddress.Parse(ipAddress));
38
39             // register to message received
40             SubscribeClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
41
42             string clientId = Guid.NewGuid().ToString();
43
44             SubscribeClient.Connect(clientId);
45
46             // subscribe to the topic "/home/temperature" with QoS 2
47             SubscribeClient.Subscribe(new string[] { "avatar/uploaded" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
48         }
49
50         void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
51         {
52             // handle message received
53             ClientPublishReceivedAction.Invoke(sender, e);
54         }
55
56         public void client_MqttMsgPublish(string publishString)
57         {
58             SubscribeClient.Publish("avatar/signed", Encoding.UTF8.GetBytes(publishString), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
59         }
60     }

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

 
时间: 2024-10-05 12:49:15

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

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

越来越多的项目需要用到实时消息的推送与接收,怎样用ASP.NET现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过

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

越来越多的项目需要用到实时消息的推送与接收,怎样用Python现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过R

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

越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Res

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

越来越多的项目需要用到实时消息的推送与接收,怎样用C#现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Restf

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

越来越多的项目需要用到实时消息的推送与接收,怎样用node.js实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通

Web实时消息后台服务器推送技术GoEasy(支持多语言)---附GoEasy web 推送实例

越来越多的项目需要用到实时消息的推送与接收,怎样实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Restful

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

PHP websocket实时消息推送 在这里我记录一下之前如何实现服务器端与客户端实时通信: 实现步骤如下: 1.        获取GoEasy appkey. 在goeasy官网上注册一个账号,并新建一个app. APP创建好后系统会为该app自动生成两个key, 一个既可以用来接收又可以用来推送 (supper key),另一个只可以用来接收(subscriber key). 2.        客户端订阅一个channel. a.        在客户端引入goeasy.js, js地

【转】手机应用为什么明明已经退出,还会收到推送的消息?

手机应用为什么明明已经退出,还会收到推送的消息? 是像电脑一样,应用退出后还会有某些残留程序未关闭吗?该如何完全关闭残留程序? 对于andriod用户来说经常有这种困扰,掏出你的手机,进入应用程序管理,杀掉所有应用,然后去泡杯茶,回来再看看你的手机你会神奇地发现,刚刚杀掉的应用很多都自己复活了,一个个的还活蹦乱跳的,时不时给你推送几条消息.其实andriod应用有几种复活方式: 监听系统事件:Android系统有一套广播机制,当系统发生了某件事的时候,它会通知给需要知道这件事情的所有应用.这套机

.net开发微信公众号(3)-接收微信推送的消息

接收微信推送的消息 一.消息发送发式 用户发送的消息会被微信服务器转发到开发者服务器上(启动开发者模式时填的那个URL),开发者服务器接收到消息并处理完成会把消息再发回给微信服务器,再由微信服务器推送给用户.流程也非常简单. 二.接收消息分类 根据微信官方的文档说明,把接收消息分成两类: 1.普通消息 2.事件消息 事件消息除了这6种以为,还有一种是发送模板消息后返回的结果. 三.消息处理 接下来我们看下这些消息如何处理. 首先,做消息有效性验证.上一篇我们已经写了验证的方法,在这里直接用就行了