.NET Core C#系列之XiaoFeng.MQTT中间件

XiaoFeng.Mqtt中间件,支持.NET框架、.NET内核和.NET标准库,一种非常方便操作的客户端工具。实现了MQTT客户端,MQTT服务端,同时支持TCP,WebSocket连接。支持协议版本3.0.0,3.1.0,5.0.0

快捷上手方式:

安装Nuget包,using 之后,根据下面的案例,直接上手。跑通程序后,提供开源源码,直接下载,一步步调试,最终让你学会,主打的就是一共真实。

开源地址:https://github.com/zhuovi/XiaoFeng.Mqtt

bc403c60926a800d21ffab0831847b85.png

如果喜欢我的项目,可以点个★星星或者一键三联,也算对我的一种鼓励,我将持续创作。

.NET CLI :安装方式:

$ dotnet add package XiaoFeng.Mqtt --version 1.0.1

Package Manager:

PM> Install-Package XiaoFeng.Mqtt --Version 1.0.1

       PackageReference:

<PackageReference Include="XiaoFeng.Mqtt" Version="1.0.1" />

      Paket CLI:

> paket add XiaoFeng.Mqtt --version 1.0.1

      Script & Interactive:

> #r "nuget: XiaoFeng.Mqtt, 1.0.1"

       Cake:

// Install XiaoFeng.Mqtt as a Cake Addin
#addin nuget:?package=XiaoFeng.Mqtt&version=1.0.1


// Install XiaoFeng.Mqtt as a Cake Tool
#tool nuget:?package=XiaoFeng.Mqtt&version=1.0.1

基本使用方法

Mqtt连接串,解释:

mqtt://username:7092734@127.0.0.1:1883?ConnectionTimeout=3000&ReadTimeout=3000&WriteTimeout=3000
[<protocol>]://[[<username>:<password>@]<host>:<port>][?<p1>=<v1>[&<p2>=<v2>]]
|----------|---|-----------|-----------|------|------|-----------------------|
| protocol |   | username  | password  | host | port |  params               |

protocol 支持mqtt,mqtts,ws,wss,tcp username 用户名

7092734 密码

127.0.0.1 主机

6379 端口

ConnectionTimeout 连接超时时长

ReadTimeout 读取数据超时时长

WriteTimeout 发送数据超时时长

最小的连接串是:mqtt://127.0.0.1

实例化一个Mqtt对象

直接上demo程序:

//客户端
var client = new MqttClient("mqtt://admin:123456@127.0.0.1:1883");
client.ClientOptions = new MqttClientOptions
{
    UserName = "admin",
    Password = "123456",
    ProtocolVersion = MqttProtocolVersion.V500//可指定相关版本
};
client.OnStarted += o =>
{
    w("已连接.");
};
client.OnStoped += o =>
{
    w("已停止.");
};
client.OnError += (o, e) =>
{
    //错误消息
    w(e);
};
client.OnMessage += e =>
{
    //除订阅消息以外的所有消息
    var msg = "Unknown error.";
    if (e.ResultType == ResultType.Success)
    {
        if (e.Message.IsNullOrEmpty())
        {
            if (e.MqttPacket != null) msg = e.MqttPacket.ToString();
            else msg = "Unknown packet.";
        }
        else
            msg = e.Message;
    }
    else
    {
        msg = e.Message.IsNullOrEmpty() ? "" : e.Message;
    }
    w(msg);
};
client.OnPublishMessage += e =>
{
    //专一接收所订阅的消息
    var c = client;
    w($"Publish Message: {e}");
};
//开启连接服务端
await client.ConnectAsync().ConfigureAwait(false);
//订阅主题
await client.SubscributeAsync("a/b").ConfigureAwait(false);
//向指定的主题发送消息
await client.PublishAsync("a/b", "Hello World").ConfigureAwait(false);


//服务端
var server = new MqttServer(new IPEndPoint(IPAddress.Any, 1883));
//添加服务器凭证
server.AddCredential("admin", "123456", "");
server.OnStarted += o =>
{
    //服务器启动消息
    w("ELF (MQTT) server version 1.0.0 starting.");
    w("Config loaded from elfmqtt.conf.");
    w($"Listen {server.ServerOptions.EndPoint} mqtt://{server.ServerOptions.EndPoint}");
};
server.OnStoped += o =>
{
    //服务器停止消息
    w("ELF MQTT Server Version 1.0.0 stoped.");
};
server.OnConnected += o =>
{
    //新连接消息
    w($"New connection from {o.EndPoint} on port {server.ServerOptions.EndPoint.Port}");
};
server.OnError += (o, m) =>
{
    //错误消息
    w($"Error: {m}");
};
server.OnDisconnected += o =>
{
    //客户端断开连接消息
    var data = o.GetClientData();
    var address = "";
    if (data != null && data.ConnectPacket != null)
        address = data.ConnectPacket.ClientId;
    address += $"[{o.EndPoint}]";
    w($"Client {address} disconnected.");
};
server.OnMessage += (o, e) =>
{
    //接收消息
    var msg = "Unknown error.";
    if (e.ResultType == ResultType.Success)
    {
        if (e.Message.IsNullOrEmpty())
        {
            if (e.MqttPacket != null) msg = e.MqttPacket.ToString();
            else msg = "Unknown packet.";
        }
        else
            msg = e.Message;
    }
    else
    {
        msg = e.Message.IsNullOrEmpty() ? "" : e.Message;
    }
    w(msg);
};


server.Start();


static void w(string msg) => Console.WriteLine($"{DateTime.Now.ToTimeStamp()}: {msg}");

比着demo调试,基本算是入门了,然后下载我的源码,慢慢研究吧,有问题,可以留言,收到就回复。

cce4d48cd0b01a9ad42e18f10c1d4c22.jpeg

欢迎扫码关注我

轻松愉快学技术

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误提示表明在执行脚本时权限被拒绝。根据引用\[1\]中的描述,可能是因为脚本文件的权限设置不正确导致的。你可以尝试使用chmod命令为脚本文件赋予执行权限。例如,如果脚本文件名为zk.sh,你可以在终端中执行以下命令: chmod +x /usr/bin/zk.sh 这将为脚本文件赋予执行权限。然后,你可以尝试再次执行脚本,看是否问题得到解决。 另外,引用\[2\]中提到,有时候在使用容器时,外部的容器数据卷权限可能不允许执行脚本。如果你的脚本文件位于容器的/conf/zoo.cfg目录下,你可以尝试给予这个目录777的权限,然后重新执行脚本。 请尝试以上方法,如果问题仍然存在,请提供更多的细节,以便我能够更好地帮助你解决问题。 #### 引用[.reference_title] - *1* [解决‘bash: /usr/bin/zk.sh: Permission denied](https://blog.csdn.net/weixin_44606952/article/details/129022250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [docker部署zookeeper/执行docker-compose报错:Permission denied](https://blog.csdn.net/Xiaofeng_Lu__/article/details/130255790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值