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()
)
);
还不快抢沙发