ubuntu下使用mosquitto与分析

来源:互联网 发布:dbc2000修改传奇数据 编辑:程序博客网 时间:2024/06/08 15:46

mosquitto是一款实现了消息推送协议MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单。 Mosquitto采用出版/订阅的模式实现MQTT协议,这种设计模式将通信终端之间的关系统一到服务程序中进行管理,可极大减轻客户端的开发和维护工作。

一.mosquitto安装 # 下载源代码包wget http://mosquitto.org/files/source/mosquitto-1.3.4.tar.gz# 解压tar zxfv mosquitto-1.3.4.tar.gz# 进入目录cd mosquitto-1.3.4# 编译make# 安装sudo make install----------//1.1 安装可能遇见的错误1】编译找不到openssl/ssl.h   //安装opensslsudo apt-get install libssl-dev【2】编译过程找不到ares.h    //修改config.mk文件   修改config.mk中的WITH_SRV:=yes,改为WITH_SRV:=no        如果编辑config.mk文件失败,赋予权限        输入命令:chmod 777 -Rf *【3】使用过程中找不到libmosquitto.so.1    //修改libmosquitto.so位置, 创建链接    sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1    // 更新动态链接库    sudo ldconfig【4】make: g++:命令未找到     // 安装g++编译器sudo apt-get install g++----------    //1.2 配置文件# =================================================================# 客户端心跳的间隔时间#retry_interval 20# 系统状态的刷新时间#sys_interval 10# 系统资源的回收时间,0表示尽快处理#store_clean_interval 10# 服务进程的PID#pid_file /var/run/mosquitto.pid# 服务进程的系统用户#user mosquitto# 客户端心跳消息的最大并发数#max_inflight_messages 10# 客户端心跳消息缓存队列#max_queued_messages 100# 用于设置客户端长连接的过期时间,默认永不过期#persistent_client_expiration# =================================================================# Default listener# =================================================================# 服务绑定的IP地址#bind_address# 服务绑定的端口号#port 1883# 允许的最大连接数,-1表示没有限制#max_connections -1# cafile:CA证书文件# capath:CA证书目录# certfile:PEM证书文件# keyfile:PEM密钥文件#cafile#capath#certfile#keyfile# 必须提供证书以保证数据安全性#require_certificate false# 若require_certificate值为true,use_identity_as_username也必须为true#use_identity_as_username false# 启用PSK(Pre-shared-key)支持#psk_hint# SSL/TSL加密算法,可以使用“openssl ciphers”命令获取# as the output of that command.#ciphers# =================================================================# Persistence# =================================================================# 消息自动保存的间隔时间#autosave_interval 1800# 消息自动保存功能的开关#autosave_on_changes false# 持久化功能的开关persistence true# 持久化DB文件#persistence_file mosquitto.db# 持久化DB文件目录#persistence_location /var/lib/mosquitto/# =================================================================# Logging# =================================================================# 4种日志模式:stdout、stderr、syslog、topic# none 则表示不记日志,此配置可以提升些许性能log_dest none# 选择日志的级别(可设置多项)#log_type error#log_type warning#log_type notice#log_type information# 是否记录客户端连接信息#connection_messages true# 是否记录日志时间#log_timestamp true# =================================================================# Security# =================================================================# 客户端ID的前缀限制,可用于保证安全性#clientid_prefixes# 允许匿名用户#allow_anonymous true# 用户/密码文件,默认格式:username:password#password_file# PSK格式密码文件,默认格式:identity:key#psk_file# pattern write sensor/%u/data# ACL权限配置,常用语法如下:# 用户限制:user <username># 话题限制:topic [read|write] <topic># 正则限制:pattern write sensor/%u/data#acl_file# =================================================================# Bridges# =================================================================# 允许服务之间使用“桥接”模式(可用于分布式部署)#connection <name>#address <host>[:<port>]#topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]# 设置桥接的客户端ID#clientid# 桥接断开时,是否清除远程服务器中的消息#cleansession false# 是否发布桥接的状态信息#notifications true# 设置桥接模式下,消息将会发布到的话题地址# $SYS/broker/connection/<clientid>/state#notification_topic# 设置桥接的keepalive数值#keepalive_interval 60# 桥接模式,目前有三种:automatic、lazy、once#start_type automatic# 桥接模式automatic的超时时间#restart_timeout 30# 桥接模式lazy的超时时间#idle_timeout 60# 桥接客户端的用户名#username# 桥接客户端的密码#password# bridge_cafile:桥接客户端的CA证书文件# bridge_capath:桥接客户端的CA证书目录# bridge_certfile:桥接客户端的PEM证书文件# bridge_keyfile:桥接客户端的PEM密钥文件#bridge_cafile#bridge_capath#bridge_certfile#bridge_keyfile二.mosquitto安装完成后,启动服务端 输入命令:mosquitto2.1接着再开个终端当做客户端订阅消息,例子:进入mosquitto-1.3.4   输入命令:mosquitto_sub  -t test -h 192.168.1.162   // mosquitto_sub 是订阅消息,-t 是要订阅的主题,-h 服务端的ip地址2.2 然后要开个客户端推送消息,安装虚拟机,安装ubuntu,例子:进入mosquitto-1.3.4    输入命令:mosquitto_pub -t test -m "123456" -h 192.168.1.162    // mosquitto_pub 是发布消息,-t 是要发布的主题,-h 服务端的ip地址--------------------三.**mosquitto_pub参数说明:**-d,                  // 开启debug选项-f, --file           // 把一个文件的内容做为消息的内容发送。经测试,支持txt文件,不   支持doc等其他形式文件。-h, --host            //说明所连接到的域名,默认是localhost-i, --id              //客户端的ID号,如果没有指定,默认是mosquitto_pub_加上客户端的进程id,不能和--id_prefix同时使用。 -I, --id-prefix       //指定客户端ID的前缀,与客户端的进程ID连接组成客户端的ID,不能喝--id同时使用。-l, --stdin-line      //从总段读取输入发送消息,一行为一条消息,空白行不会被发送。-m, --message        // 从命令行发送一条消息,-m后面跟发送的消息内容。-n, --null-message    //发送一条空消息。-p, --port           // 连接的端口号,默认是1883.-P, --pw (大写P)     // 指定密码用于代理认证,使用此选项时必须有有效的用户名。 -q, --qos            //  指定消息的服务质量,可以为0,1,2,默认是0.--quiet               // 如果指定该选项,则不会有任何错误被打印,当然,这排除了无效的用户输入所引起的错误消息。-r, --retain         //  如果指定该选项,该条消息将被保留做为最后一条收到的消息。下一个订阅消息者将能至少收到该条消息。-s, --stdin-file       //从标准输入接收传输的消息内容,所有输入做为一条消息发送。-t, --topic           // 指定消息所发布到哪个主题。-u, --username        // 指定用户名用于代理认证。--will-payload       // 如果指定该选项,则万一客户端意外和代理服务器断开,则该消息将被保留在服务端并发送出去,该选项必须同时用--will-topic                // 指定主题。--will-qos           //  指定Will的服务质量,默认是0.必须和选项 --will-topic同时使用.--will-retain         // 如果指定该选项,则万一客户端意外断开,已被发送的消息将被当做retained消息。必须和选项 --will-topic同时使用.--will-topic          // 指定客户端意外断开时,Will消息发送到的主题。-------------------- **3.1mosquitto_pub参数说明(跟mosquitto_sub不同的)**-c, --disable-        // clean-session 禁止'clean session'选项,即如果客户端断开连接,这个订阅仍然保留来接收随后到的QoS为1和2的消息,当改客户端重新连接之后,它将接收到已排在队列中的消息。建议使用此选项时,客户端id选项设为--id-k, --keepalive       // 给代理发送PING命令(目的在于告知代理该客户端连接保持且在正常工作)的间隔时间,默认是60s-v, --verbose        // 冗长地打印收到的消息。若指定该选项,打印消息时前面会打印主题名——“主题 消息内容”,否则,只打印消息内容--------------------四.mosquitto分析【1】程序文件说明    mosquitto – 代理器主程序    mosquitto.conf – 配置文件    mosquitto_passwd – 用户密码管理工具    mosquitto_tls –  SSL和TLS    mosquitto_pub – 用于发布消息的命令行客户端    mosquitto_sub – 用于订阅消息的命令行客户端    mqtt – MQTT的后台进程    libmosquitto – 客户端编译的库文件【2】使用订阅树发布消息     在Mosquito程序中,消息发送过程主要通过遍历订阅树来完成,具体为:递归遍历订阅树找到指定的订阅列表,并将消息挂到订阅列表中的每个contextg的消息队列中,如果消息的retain字段被设置为1,则mosquitto还需要保存此消息,以备新订阅的客户端可以立即收到上次发送的消息;另外,发往系统topic的消息也会被mosquitto保存起来。上述消息发送过程主要通过函数mqtt3_db_messages_queue来完成。【3】从订阅树中删除订阅客户端    在Mosquitto程序中,客户端可以向mosquitto服务器发送取消对某个topic的订阅请求,服务器收到请求之后,将从订阅树中删除该客户端,该过程需要遍历订阅树以找该topic在订阅树中的位置,进而获得到订阅该topic的订阅列表,从而将其从订阅树中删掉。该过程与发送消息类似,首先将topic进行分片,然后根据topic片段遍历订阅树找到该topic的订阅列表;然后遍历订阅列表,将该客户端从订阅列表中删除。【4】订阅树机制的优缺点    Mosquito程序采用订阅树形式维护客户端之间的订阅与发布消息,这种方式优点是逻辑清晰,便于开发和维护。缺点是其遍历过程效率较低。同时,程序中存在很多对订阅树的遍历过程:订阅、发布消息、取消订阅等,在客户端数量增加时,该功能对效率的影响将更为明显。
0 0
原创粉丝点击