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
- ubuntu下使用mosquitto与分析
- ubuntu下mosquitto的安装使用
- mosquitto配置与使用
- mosquitto安装与使用
- mosquitto 安装与使用
- mosquitto ubuntu下编译和安装
- 在ubuntu上安装,使用MQTT Mosquitto
- 在ubuntu上安装,使用MQTT Mosquitto
- Linux下Mosquitto安装和使用
- Linux下Mosquitto安装和使用
- windows server下安装使用mosquitto
- MQTT协议与mosquitto的安装使用
- Ubuntu 上安装mosquitto
- Ubuntu环境安装mosquitto
- Mosquitto Ubuntu 安装
- Ubuntu 安装Mosquitto
- mosquitto ubuntu 安装
- windows环境下mosquitto环境搭建与mqtt测试
- ThinkPHP分页实例
- VMware虚拟机三种模式配置
- Linux下制作Ubuntu的U盘启动盘
- Swift字符串操作(截取、替换)String
- Quartz实现动态定时任务--http://my.oschina.net/u/1177710/blog/284608
- ubuntu下使用mosquitto与分析
- ajaxSubmit()ajax表单提交。
- 2713:肿瘤面积
- poj 3281 Dining(最大流)
- OC_09_02 协议
- STM32 ----------编译等问题总结
- android MTP
- IOS开发微博中涉及到的一些正则表达式(表情,话题,链接,@)
- 『原创』统计建模与R软件-第四章 参数估计