C# 使用MQTT 协议实现通讯

 1.什么是MQTT 协议

 MQTT 协议的全称是 Message Queuing Telemetry Transport,翻译为消息队列传输探测,它是 ISO 标准下的一种基于发布 - 订阅模式的消息协议,它是基于 TCP/IP 协议簇的,它是为了改善网络设备硬件的性能和网络的性能来设计的。MQTT 一般多用于 IoT 即物联网上,广泛应用于工业级别的应用场景,比如汽车、制造、石油、天然气等。

2.MQTT 协议优缺点

优点: 

  1. 更加简单:MQTT是一种消息队列协议,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,相对于其他协议,开发更简单;
  2. 网络稳定:工作在TCP/IP协议上;由TCP/IP协议提供稳定的网络连接;
  3. 轻量级:小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;适合低带宽,数据量较小的应用;
  4. 易于实现:MQTT协议的服务端程序已经非常成熟,PHP,JAVA,Python,C,C#等系统语言都可以来向MQTT发送相关消息;
  5. 开放性:源代码开放,都可以用,也进一步推动了MQTT的发展,百度云、阿里云、中国移动onenet等几乎所有的开放性物联网平台都支持MQTT;

缺点:

  1. 不支持文件和AV
  2. 不支持与第三方HTTP集成
  3. 不支持负载分配
  4. 不支持用户管理界面
  5. 不支持点对点通信,并且使用标准的MQTT协议
  6. 不支持群组通信或群组管理,而是实现群组成员的管理

3. MQTT client 和MQTT server 理解

1. MQTT client : 向server 订阅对应的主题消息内容,并获取到订阅的相关主题消息或者发布相关的主题消息给server。

2. MQTT server :主要用于与多个客户端保持连接,并处理client (客户端)的发布和订阅等逻辑。一般很少直接从server (服务端)发布消息给客户端(如果要发布消息,可以使用 mqttServer.Publish(appMsg); 直接发布消息给client),多数情况下server 都是转发client 已订阅主题消息给对应的client,在系统中起到一个中介的作用。

 4.MQTT 协议与TCP/IP 协议的联系

  1. MQTT 协议是属于应用层的协议
  2. TCP/IP 协议是属于传输层的协议 

5.MQTT Serve和MQTT Client 发布和订阅消息测试

1.首先下载MQTT Serve 测试工具HslCommunication

1.1 开启一个MQTT 服务端

C# 使用MQTT 协议实现通讯_第1张图片

 1.2 再开启一个测试的客户端,并连接进来

C# 使用MQTT 协议实现通讯_第2张图片

1.3 开启我们的写的客户端,端口号同样是1883 

C# 使用MQTT 协议实现通讯_第3张图片

 1.4 在服务端可以到看,2个客户端连接进来了

C# 使用MQTT 协议实现通讯_第4张图片

 2. 进行消息发布和订阅测试

 2.1 客户端1,订阅一个主题消息为香蕉的主题。客户端2,订阅一个主题消息为苹果的主题。怎么理解这个测试呢?就是当消息的发布者,在发布消息的时候,如果主题是香蕉,服务端就会把这个消息只发给客户端1,而客户端2则不会收到主题消息为香蕉的消息。明白了吧!

C# 使用MQTT 协议实现通讯_第5张图片

2.2 客户端2开始发布主题消息

C# 使用MQTT 协议实现通讯_第6张图片 2.3 客户端1 发布主题消息

C# 使用MQTT 协议实现通讯_第7张图片

 2.3 服务端向客户端发布消息

C# 使用MQTT 协议实现通讯_第8张图片

C# 使用MQTT 协议实现通讯_第9张图片

总结:

1.服务端也能向客户端发布消息,但服务端的作用一般是用于消息的转发。并把对应的主题消息转发给对应的客户端。

2.客户端可以做为消息的订阅者,也可以做为消息的发布者

源代码已上传到 CSDN 为开发者提供的开源项目创新服务平台 gitcode

 参考文献:

https://zhuanlan.zhihu.com/p/268113708

https://zhuanlan.zhihu.com/p/342874157

https://blog.csdn.net/panwen1111/article/details/79245161

https://blog.csdn.net/yuming/article/details/125834921

你可能感兴趣的:(上位系统连接PLC系列,网络,c#)