标签 mqtt 下的文章

MQTTnet4入门(一)实现服务端


MQTT主要用于物联网,最近因为一些特殊需求,需要做个类似SCADA的东西,经过评估MQTT比较符合预期。
对于MQTT,.Net下有个使用最广泛的库MQTTnet,nuget里最新的版本是4.1.4.563。网上搜了一下,现有教程基本都是2或者3这些版本,而到了4.0版里面的使用发放确实不太一样,所以本篇以上述版本为例,实现一个简单的服务端和客户端。

创建服务端:

MqttServer server;

var optionbuilder = new MqttServerOptionsBuilder()
            .WithDefaultEndpoint()//设置默认地址127.0.0.1
            .WithDefaultEndpointPort(1883);//设置端口

server = new MqttFactory().CreateMqttServer(optionbuilder.Build());//创建服务端实例
server.ClientConnectedAsync += Server_ClientConnectedAsync;//实现客户端连接方法
server.StartAsync();//启动服务端

对于其中的客户端连接后的方法:

private Task Server_ClientConnectedAsync(ClientConnectedEventArgs arg)
{
    MessageBox.Show($"{arg.ClientId}上线了!");
    return Task.CompletedTask;
}

一般情况下,服务端(broker)只是一个中转站,所有的消息都是由客户端发送至服务端,然后服务端转发至其他客户端。但服务端也提供了一个方法,可以实现服务端向客户端进行广播:

server.InjectApplicationMessage(
            new InjectedMqttApplicationMessage(
                new MqttApplicationMessageBuilder()
                .WithTopic("主题")
                .WithPayload("消息内容")
                .Build()
                )
            );