zoukankan      html  css  js  c++  java
  • mqtt

    客户端/服务器模式 vs 发布/订阅模式
    传统的网络通信模式几乎都是基于客户端/服务器模式的:客户端直接和一个服务端建立连接,通信来获取数据,数据源和数据目的地双方直接连接。比如在Web应用程序中,浏览器直接和Web服务器通过HTTP协议通信,浏览器需要知道服务器的IP和端口号。

    而发布/订阅模式解耦了客户端,客户端分为2种角色:发布者(Publisher)和订阅者(Subscriber)。每一个发布者(Publisher)可以发送不同类型的消息,我们把消息的类型叫做主题(topic),MQTT通信中的消息都属于某一个主题 ,而只有订阅了这个主题的订阅者(Subscriber)才能收到属于这个主题的消息。发布者和订阅者不需要在意和知道对方的存在(不需要知道对方的IP和端口),也不需要直接与对方建立连接。因为通信中存在着一个叫代理(MQTT broker)的第三种角色,也可以叫MQTT服务器(MQTT server)。
    发布者、订阅者只需要知道MQTT 服务器的IP和端口即可,并和它直接建立连接通信。MQTT代理作为消息的中转,它过滤所有接受到的消息,并按照一定的机制(MQTT标准规定是基于主题的消息过滤派发方式,而具体的MQTT服务器软件也提供了其他的派发方式)分发它们,使得所有注册到MQTT代理的订阅者只接收到他们订阅了的消息,而不会收到他不关心的消息。
    当发布者发布一条消息的时候,他必须同时指定消息的主题和消息的负载。MQTT代理在收到发布者发过来的消息时,无需访问消息负载,他只是访问消息的主题信息,然后根据这主题派发给订阅者。需要注意的是,一个客户端可以同时既当发布者又当订阅者。比如一个开发板连接了一盏LED灯,它可以发布灯的暗/亮状态信息,也可以从其他节点订阅对灯的控制消息。

    # 安装服务端
    sudo apt-get install mosquitto
    # 安装客户端 (订阅sub  与 发布pub)
    sudo apt-get install mosqutitto-client
    # 安装调试器
    sudo apt-get install mosquitto-dbg 
    
    ## 查看状态 
    sudo service mosquitto status
    
    ## 开启 mosquitto
    sudo service mosquitto start
    
    ## 关闭 mosquitto
    sudo service mosquitto stop
    
    
    #启动代理服务
    mosquitto -c /etc/mosquitto/mosquitto.conf
    mosquitto -v
        【-v】打印更多的调试信息
     
    #订阅主题
    mosquitto_sub -v -t sensor -h 192.168.228.130 -p 1883
    mosquitto_sub -h localhost -t "test" -u "" -P ""
        【-t】指定主题,此处为sensor
        【-v】打印更多的调试信息
        【-h】指定代理服务的IP地址
        【-p】指定代理服务的端口号
     
    #发布内容
    mosquitto_pub -t sensor -m test_one -h 192.168.228.130 -p 1883
    mosquitto_pub -h localhost -t "test" -m "hello world" -u "" -P ""
        【-t】指定主题,此处为sensor
        【-m】指定消息内容,此处为test_one
        【-h】指定代理服务的IP地址
        【-p】指定代理服务的端口号
    
    

    用emq作为mqtt Broker

    ubuntu 安装 emq (zip方式)

    1.去 https://www.emqx.io/downloads/broker/?osType=Linux  下载一个自己ubuntu对应版本的zip压缩包
    2.上传到服务器解压
    3.进入解压后的文件 /etc
    ## 启动emqx
    ## ./bin/emqx start
    
    ## 检查运行状态
    ## ./bin/emqx_ctl status
    
    ## 停止emqx
    ## ./bin/emqx stop
    
    ## 启动停止
        systemctl start|stop|restart emqx.service
    
    # 设置用户密码:
    vi /emqx/etc/emqx.conf
    修改true为false
    allow_anonymous = false
    
    # 导入模块
    ./bin/emqx_ctl plugins load emqx_auth_username
    
    # 输入账号密码
    ./bin/emqx_ctl users add <账号> <密码>
    比如: ./bin/emqx_ctl users add person 123456
    
    修改配置文件后要先关闭emqx服务,然后再重新启动
    ps -ef |grep emq
    kill -9 port
    ./bin/emqx start
    
  • 相关阅读:
    转载-HTTP
    程序员如何写出杀手级的简历
    23 岁的你,曾处于什么样的状态?现在呢?
    IntelliJ IDEA 14 java项目中添加jar包
    BNR Android Demo学习笔记(一)——CrimeIntent
    Android高仿微信(一)——如何消除启动时的白屏
    Swift2.1 语法指南——高级操作符
    Swift2.1 语法指南——访问控制
    Swift2.1 语法指南——泛型
    Swift2.1 语法指南——协议
  • 原文地址:https://www.cnblogs.com/plusUltra/p/12295004.html
Copyright © 2011-2022 走看看