基于Http协议订阅发布系统设计
--物联网系统架构设计
 
1,订阅发布(subscriber-publisher)
     订阅发布模式最典型的应用场景就是消息系统的设计。在消息系统的架构中,消息的发送者称作(publisher),消息的接收者称作(subscriber),参见wikipedia: Publish–subscribe pattern。整个消息系统的架构可以用如下图1来描述:
基于Http协议订阅发布系统设计

 

图1
  由图1可知消息系统主要包括3个组件: 发布者,订阅者和消息代理(Broker),而整个消息系统的核心即是Broker,而目前就业务能力而言Broker的实现难点主要在于它的吞吐量。拿手机消息推送举例,在当前的移动互联时代,就我们很常见的大多数app用户数基本都是百万级别以上(流行app基本是千万级别),这意味着Broker至少要能支持百万台设备的订阅,使用单台服务器做Broker显然不能解决问题。而在物联网时代,订阅者将不再只有手机,订阅者可以是任何电子设备,这种场景的级别将是手机数量的百倍。
 
2,Mqtt协议的发布订阅系统实现方案
2.1,Mqtt协议
     根据官方的定义,mqtt协议即是machine-to-machine (M2M)的连接协议,该协议就是为发布订阅模式设计的非常轻量的消息传输协议。具体参见:http://mqtt.org/
从mqtt协议定义可知,该mqtt就是为发布订阅系统而设计,并且非常轻量。
2.2,实现方案
     实现一套完整的发布订阅系统,主要就是两个组件(client和broker)一个协议规范(mqtt)。
2.3, 架构设计
     发布订阅的服务系统架构非常简单,基本都遵照图1的基本架构模式。对于一个家庭的物联网应用,如果设备仅想要在局域网内访问,则broker只需要安装在(基于NanoPi或RasPi开发的)小型的设备中或者直接集成到路由器中。当然对于真正的物联网应用,我们还是希望设备可以通过互联网就可以管理和控制,所以很多broker实际应当在互联网服务器中。
2.4, Mqtt协议的订阅发布系统交互原理
     首先引用一下开源项目paho提供的python版客户端执行订阅和发布动作的demo,代码非常简短
 1 #susbscriber
 2 import paho.mqtt.client as mqtt
 3 
 4 # The callback for when the client receives a CONNACK response from the server.
 5 def on_connect(client, userdata, rc):
 6     client.subscribe("$SYS/#")
 7 
 8 # The callback for when a PUBLISH message is received from the server.
 9 def on_message(client, userdata, msg):
10     print(msg.topic+" "+str(msg.payload))
11 
12 client = mqtt.Client()
13 client.on_connect = on_connect
14 client.on_message = on_message
15 client.connect("iot.eclipse.org", 1883, 60)
16  
17 # Blocking call that processes network traffic
18 client.loop_forever()
View Code

 

相关文章:

  • 2022-01-07
  • 2021-09-02
  • 2021-12-18
  • 2021-08-17
  • 2021-04-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-18
  • 2021-05-22
  • 2021-12-29
  • 2021-11-13
  • 2022-12-23
相关资源
相似解决方案