技术标签: mosquitto mqqt websocket linux
Shaocheng.Li
Toggle main menu visibility
首页
关于
MQTT 协议和 mosquitto
2015-08-11 Network 12792
MQTT 是一个轻型协议,使用基于 TCP/IP 协议的发布/订阅消息转发模式,专门用于机器对机器 (M2M) 通信。 MQTT 协议的中心是 MQTT 服务器或代理 (broker) ,支持发布程序和订阅程序进行访问,如下图所示:
用户可以使用 MQTT 构建一个传感器网络,其中各种传感器都能够以其传感器独有的消息形式发布传感器值。 订阅程序能够订阅不同的消息,以据此采取措施。 MQTT 代理将处理从发布程序到订阅程序的转发消息。
如果已经有了一个 broker ,可以直接用 MQTT 客户端软件测试。这里有一个跨平台的 MQTT 客户端 MQTT.fx 。
2. Mosquitto
mosquitto 是一个开源的 MQTT broker ,目前支持 v3.1 和 v3.1.1 协议 ,同时提供了一个 C 语言动态链接库 libmosquitto ,用于实现 mqtt 客户端:
http://mosquitto.org/documentation/
下载 mosquitto-1.4.2.tar.gz 后,解压,然后执行 make ,make install 。即可得到几个二进制可执行文件:
mosquitto : mqtt broker
mosquitto_passwd : 管理 mosquitto 密码文件的命令行工具
mosquitto_sub : mqtt 订阅者程序
mosquitto_pub : mqtt 发布者程序
相关的配置文件安装在 /etc/mosquitto/ 目录下。在 Ubuntu 下可以直接安装 sudo apt-get install mosquitto 。
现在测试一下客户端和服务端程序。为了测试方便,将客户端和服务端程序都在本机,使用 localhost 连接。执行 mosquitto -v 启动 broker ,-v 参数表示打印出运行信息,可以看到默认使用的端口是1883 :
如果你的系统出现如下问题,就需要添加一个 mosquitto 用户:
可以使用 systemd 让 mosquitto 自动启动,添加如下配置文件:
ubuntu@VM-231-137-ubuntu:/etc/systemd/system$ cat mosquitto.service
[Unit]
Description=Mosquitto MQTT Broker
ConditionPathExists=/etc/mosquitto/mosquitto.conf
After=network.target
[Service]
ExecStart=/usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
ExecReload=/bin/kill -HUP $MAINPID
User=mosquitto
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
然后在第二个终端启动订阅者程序: mosquitto_sub -h localhost -t test -v,用 -h 参数指定服务器 IP ,用 -t 参数指定订阅的话题。
在第三个终端启动发布者程序: mosquitto_pub -h localhost -t test -m “Hello world”,用 -m 参数指定要发布的信息内容,然后在订阅者的终端就可以看到由 broker 推送的信息:
在 broker 的终端也可以看到处理信息的过程:
mosquitto 语法是
mosquitto [-c config file] [ -d | --daemon ] [-p port number] [-v]
-c 是指定配置文件的路径,默认不需要配置文件。
-d 表示作为守护进程运行在后台。
-p 用来指定监听的端口,默认是 1883 ,使用 TCP 连接,如果要使用 UDP 连接,需要设为 1884。
-v 表示生成详细的运行日志,等价于配置文件中将 log_type 设为 all 。
mosquitto 默认是不需要配置文件的,它会对所有的选项采用默认值,比如用户名和密码。默认不需要用户名和密码,如果需要,可以用 mosquitto_passwd 新建用户和密码,并管理,语法是:
mosquitto_passwd [ -c | -D ] passwordfile username
mosquitto_passwd -b passwordfile username password
mosquitto_passwd -U passwordfile
-c 表示新建一个密码文件,如果文件已经存在,会被覆盖,用户名中不能包含冒号,因为密码文件中用户名和密码是用冒号隔开的。执行之后会要求设置密码,输入内容不可见,密码以加密 hash 值的方式存储在密码文件中。
-D 表示删除用户名。
-b 表示在命令行中,以明文方式设置密码。
-U 用来将密码文件中的明文密码改成加密格式。如果文件中的密码已经是 hash 值,千万不要用这个选项,否则它会对 hash 值再做一次运算,然后修改密码文件。
设好密码后,在配置文件中设置 allow_anonymous false 再用 password_file 指定密码文件的路径就可以使用了。配置文件可以放在任何位置,只要 mosquitt 能找到它。配置文件中,每一行设置一个选项,选项名称和值用空格隔开,用井号可以注释。安装好的 mosquitto 在 /etc/mosquitto/ 目录下有配置文件和密码文件的例子,复制一份皆可
文章浏览阅读762次。纯文本用textbox,带格式的文本用richtextbox_textbox设置纯文本
文章浏览阅读1.1k次。在ssm中运行代码报错如下:org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 7检查发现查询mapping层数据接收问题,返回多条数据用对象无法接收解决方案:..._expected one result (or null) to be returned by selectone(), but found: 7
文章浏览阅读41次。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;using System.Data.SqlClient;namespace DAL{ public class DBHelper ..._完整的dbhelper类
文章浏览阅读490次。格式:按钮组件不支持着色,所以colorAccent主题色在项目中没有效果。_android权威编程指南第三版笔记
文章浏览阅读945次。背景微信小程序的测试发布在没有 CI/CD 等相关工具的情况下,存在着如下的问题:小程序开发助手中,同一个开发者只能显示一个开发版本测试同事、产品经理、UI设计师找开发要二维码,或者本地拉取代码后使用开发者工具打开,不方便且效率较低本地生成的二维码会出现携带本地代码、未及时拉取分支其他改动等问题为了避免如上问题的发生,采用微信小程序集成 Jenkins 的方案。想达到一个效果,开发人员只管往前写代码,提交代码,修改bug。而测试人员就通过jenkins自动打包和部署进行测试开发人员所做的功能和回归_win2012如何配置小程序?
文章浏览阅读1k次。#if defined(__X86_64__) || defined(__X86_64) || defined(__amd_64) || defined(__amd_64__)_gcc查看64 32位
文章浏览阅读972次。原文链接地址:http://source.android.com/porting/bluetooth.html#androidBluetoothPorting本文涵盖以下方面· 移植· 编译· 疑难解答· 工具· 支持特性 Android 的蓝牙协议栈使用BlueZ实现来对GAP, SDP以及R_安卓移植hcitool
文章浏览阅读1.5k次,点赞4次,收藏20次。教育大数据可视化系统,通过使用Hadoop生态圈中的组件进行数据归一化及存储,解决数据分析过程,使用ECharts可视化工具来对学习行为分析后的抽象结果进行展现,数据分析的维度有平台健康度,每日登录人数分析、平均学习时长分析、学习行为次数分析、每日活跃情况分析和分时段学习人数分析等。在学生学习的过程中,学校的管理者或负责教师需要了解学生的学习情况和学习状态,因此必须要通过学生的学习行为数据进行数据分析,将学生的学习情况直观的展现给用户,方便教师进行学生管理和评测。5.7 分时段学习人数分析界面 23。_基于hadoop线上课程信息分析系统实现
文章浏览阅读163次。java 功能 备注 跨域请求配置 spring增加@CrossOrigin注释 返回参数前端不接收 配置springmvc返回格式为json example 查询未查到content 为null @PathVariable("articleId") 用来动态绑定url参数 spingmvc No mapping found for HTT..._在这次的博客后台实战中,我遇到了很多问题
文章浏览阅读2.2w次,点赞9次,收藏13次。基本概念看socketio官方文档 http://socket.io/docs/rooms-and-namespaces/namespace 和room的概念其实用来同一个服务端socket多路复用的。namespace,room和socketio的关系如下。socket会属于某一个room,如果没有指定,那么会有一个default的room。这个room又会属于某个namespace,_socketio 房间概念
文章浏览阅读6.5k次。一、动态增删行在 ext 表格中,动态添加行主要和表格绑定的 store 有关,通过对 store 数据集进行添加或删除,就能实现表格行的动态添加删除。 (1) 动态添加表格的行 gridStore.add({}); (2) 动态删除表格的行 gridStore.removeAt(gridStore.count() - 1); 二、动态增删列在 ext_extjs 表格删除一列
文章浏览阅读211次。2021 年 2 月 5 日星期五,想喝奶茶的一天。想要 coco 今日推出的奶茶包,可惜要 88 赞。废话少说,进入正题。1 凸集与凸函数1.1 仿射集与凸集-1定义 1.1.1 若集合 W⊆RnW\subseteq\mathbb{R}^nW⊆Rn 中任意两个不同元素对于加法和数乘皆是封闭的,即任取 x1,x2∈Wx_1,x_2\in Wx1,x2∈W,λ1,λ2∈R\lambda_1,\lambda_2\in\mathbb{R}λ1,λ2∈R 皆有λ1x1+λ2x2∈W,\lambd_仿射集为相对开集