CN106775772A - 一种基于Mqtt协议服务器实现方法 - Google Patents
一种基于Mqtt协议服务器实现方法 Download PDFInfo
- Publication number
- CN106775772A CN106775772A CN201710041498.XA CN201710041498A CN106775772A CN 106775772 A CN106775772 A CN 106775772A CN 201710041498 A CN201710041498 A CN 201710041498A CN 106775772 A CN106775772 A CN 106775772A
- Authority
- CN
- China
- Prior art keywords
- jar
- client computer
- mqtt
- service end
- bags
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种基于Mqtt协议服务器实现方法,其实现过程为,基于开源的Mosquitto服务器平台,使用Java作为开发框架,开发客户机与服务端的jar包,对Mosquitto服务器内行为规范做再次封装;用户在平台注册之后得到封装的2个jar包,通过调用jar包内的方法,使客户机在Mosquitto服务器上订阅指令信息,当客户机收到服务端的指令时根据相应指令做出对应反应;服务端jar包用于开发人员,调用jar中方法为客户端发送相应指令使客户机完成对应工作。本发明的一种基于Mqtt协议服务器实现方法与现有技术相比,在最短的时间内,完成一个企业级中小型用户MQTT接入开发,省去学习的时间周期,同时不需要环境系统搭建,在本发明已提供Jar包,可进行快速开发。
Description
技术领域
本发明涉及计算机应用技术领域,具体地说是一种基于Mqtt协议服务器实现方法。
背景技术
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议。
国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议。
MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一。在未来MQTT会进入到我们生活的各各方面。
MQTT特点如下:轻量级的 machine-to-machine 通信协议;publish/subscribe模式;基于TCP/IP;支持QoS;适合于低带宽、不可靠连接、嵌入式设备、CPU内存资源紧张,是一种比较不错的Android消息推送方案。
基于上述MQTT的优点,它极可能成为今后物联网通信的主要协议所有对MQTT协议的服务器开发变得尤为重要。在众多MQTT代理服务器中比较成熟的有Apolo,Mosquitto,Erlong,比较成熟的就有Mosquitto代理服务器。Mosquitto实现了消息推送协议 MQTTv3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。
在实际项目开发中经常会遇到类似问题,例如:需要给手机用户推送一条服务信息,或者使用手机控制税控机或者其他硬件设备。但是在现有技术层面(TCP、HTTP、Socket等)没有符合相应技术要求的技术。因此MQTT协议与Mosquitto代理服务器就成为完成上述技术比较好的解决方案。应为MQTT协议相对于其他协议来说更轻量级,网络流量消耗极少(以字节为单位),对于客户机(手机、税控机等)耗电量得到很好控制。
如果没有我们封装的jar使用MQTT协议会是一件很繁琐的事情。第一用户需要关心我发布/订阅的主题是什么,我的层级关系是怎样的;而且开发者需要结合业务逻辑与开发环境对代理服务器(Mosquitto)进行包括安全,权限等方面的配置,不但费时费力而且很容易出错。
基于此,本发明提出一种基于Mqtt协议服务器实现方法,来解决上述问题。该方法通过平台技术框架下与封装的jar中就完全可以避免上述不必要的麻烦,而且开发速度极快,大大节约时间成本。用户接入时不必考虑代理服务器(Mosquitto)安全、权限问题,我们已经对服务器进行了所有配置。用户不必考虑发布/订阅的主题,我们已经将大部分的主题样式定义完毕,只需要调用接口即可。
发明内容
本发明的技术任务是针对以上不足之处,提供一种基于Mqtt协议服务器实现方法。
一种基于Mqtt协议服务器实现方法,其实现过程为,
基于开源的Mosquitto服务器平台,使用Java作为开发框架,开发客户机与服务端的jar包,对Mosquitto服务器内行为规范做再次封装;
用户在平台注册之后得到封装的2个jar包,通过调用jar包内的方法,使客户机在Mosquitto服务器上订阅指令信息,当客户机收到服务端的指令时根据相应指令做出对应反应;
服务端jar包用于开发人员,调用jar中方法为客户端发送相应指令使客户机完成对应工作。
客户端jar包用于客户机订阅及发布,接口开发者通过jar包中放出的接口进行订阅与发布操作。
基于上述jar包,客户端与服务端之间的通信过程为:首先客户机根据jar包中定义的接口方法发布相应信息,MQTT服务器接收到信息并将信息推送给在服务器上订阅的相关读者,这时服务端根据编写的jar读取发送过来的信息,根据业务逻辑进行处理或者返回信息。
通过jar包,客户端与服务端之间的具体通信过程为:
在客户机开机时首先调用缺省登录接口,客户机内部jar首先获得本机的ClientId与型号,并且拼写Topic与Messages,然后调用第三方开源jar获得MQTT服务器连接属性,连接成功后根据对应的Topic发送Messages信息;
Mosquitto代理服务器将收到的Topic和Messages发送给已经订阅的服务端;
在服务端接收到Messages后,根据对应的信息将此设备注册到Redis中,并返回对应的业务用户名与密码,至此完成了一次jar-服务器-jar的双层通信。
在上述客户端与服务端之间的通信过程中,通过jar包,进行缺省登录的具体过程为:
首先在客户机jar中导入mqtt客户机包,在登陆时首先封装服务器需要的参数,将所有参数封装到MQTT类中,通过网络MQTT协议发送一个2进制包,包的大小以字节计算,当服务器接收到包的信息后将信息推送给已经订阅了此主题的其他服务端;
在服务端中,首先启动一个基于MQTT的监听器,同时在Mosquitto服务器上注册了此Topic的主题订阅,当Mosquitto服务器接收到客户机发来的Publish函数时,将接收到信息转发到服务端中,这时在服务端使用Runnable接口对象将数据中的Topic与Messages取出来进行下一步的逻辑处理。
本发明的一种基于Mqtt协议服务器实现方法和现有技术相比,具有以下有益效果:
本发明的一种基于Mqtt协议服务器实现方法,在最短的时间内,完成一个企业级中小型用户MQTT接入开发,省去学习的时间周期,同时不需要环境系统搭建,在本发明已提供Jar包,可进行快速开发;节约时间成本为生产企业带来客观的经济效果,如果开发人员不使用我们的jar在开发效率上会大打折扣,开发一个订阅/发布功能大概会用到1-2个工作日,效率很低。如果使用我们的jar包开发时间可以缩短到1-2个小时。对于时间成本的节省和工作效率有着大幅提高,实用性强,适用范围广泛,具有很好的推广应用价值。
附图说明
附图1是本发明客户机jar到服务端jar运作示意图。
附图2是本发明缺省登录过程示意图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步说明。
一种基于Mqtt协议服务器实现方法,本发明基于当前开源的Mosquitto服务器平台,使用Java作为开发框架,添加部分开源插件后,开发客户机与服务端的jar包,对Mosquitto服务器内行为规范做再次封装。用户在注册平台之后会得到我们封装的2个jar包,通过调用jar包内的方法,可以使客户机在Mosquitto服务器上订阅指令信息,当客户机收到服务端的指令时可以根据相应指令做出对应反映。服务端jar包用于开发人员,可以调用jar中方法为客户端发送相应指令使客户机完成对应工作。
使用JAVA语言为基础,根据自己业务特性并且结合实际生产环境,对相应技术包进行二次封装,达到灵活、可控、可扩展的目的。为今后消息推送,以及物联网平台打下技术基础。
在二次封装中使用MqttClient对象,对其进行业务上的封装实现自己的jar包。其中客户端jar包主要用于客户机订阅及少量发布,接口开发者可以通过jar包中放出的接口进行订阅与发布操作,简单方便并且附和实际的生产环境。
除平台之外最重要的是对MQTT访问协议进行了二次封装,对应的有2个jar包。一个为客户机使用的jar,一个是客户端使用的jar。当接入用户注册完之后会获得这2个jar包对自己的设备进行接入开发。
如附图1所示,客户机jar到服务端jar运作流程:
在客户机jar中开放接口给用户使用。在接口内部也有运行逻辑,其中以登录接口举例。
在客户机开机是会首先调用缺省登录接口,客户机内部jar首先获得本机的ClientId与型号,并且拼写Topic与Messages,而后调用第三方开源jar获得MQTT服务器连接属性,连接成功后根据对应的Topic发送Messages信息。
Mosquitto代理服务器已经搭建完毕,所以在客户机发布Topic时服务器已经做好了准备,并且在将收到的Topic和Messages发送给已经订阅的服务端。
在服务端通过我们的jar自动订阅了登录所发送的Topic所以可以很轻松的接收到到其中的Messages,根据对应的信息将此设备注册到Redis中,并返回对应的业务用户名与密码。至此完成了一次jar-服务器-jar的双层通信。
技术原理:
如附图2所示,在客户机jar中使用了很多第三方开源jar包得以实现MQTT协议通信。下面以缺省登录为例说明技术原理。
在客户机jar中导入了mqttClient包,在登陆时首先封装服务器需要的各类参数,这里使用到了org.fusesource.mqtt.client.MQTT类,调用其中的setHost、setClientId、setUserName、setPassword、setWillTopic、setWillMessage等一系列方法定义将要发送的信息类型以及种类。这些方法都是mqttClient包中的方法,根本原理则是将所有参数封装到MQTT类中,通过网络MQTT协议发送一个2进制包,包的大小以字节计算,当服务器接收到包的信息后会将信息推送给已经订阅了此主题的其他服务端。
在服务端中类似,首先在服务调用CallbackConnection中的listener端启动一个MQTT的Lisenter监听,代码运行的同事在Mosquitto服务器上已经注册了此Topic的主题订阅,当Mosquitto服务器接收到客户机发来的Publish时,会将接收到信息转发到服务端中,这时在服务端使用Runnable对象将数据中的Topic与Messages取出来进行下一步的逻辑处理。
如果没有二次封装的jar包,那么用户接入使就需要自己编写服务器通信协议和指令,这对接入用户造成了很大的不便与麻烦,并且对我们平台搭建的服务器安全有一定影响,在安全方面不允许接入用户直接对服务器进行访问。但是通过二次封装的jar可以很好解决上述问题,我们进过二次封装之后只开放用户关心的接口与方法,把其他用户不关心的操作在后台运行,无论是客户机开发人员或者服务端开发人员都可以很容易上手。在信息安全方面jar里也封装了安全策略保证接入用户不会直接获取服务器信息和对服务器的直接访问。大大增加服务器安全性。
对于普通接入用户根据以下步骤可以自行实现相应业务流程:
步骤S1:在平台注册接入用户,管理员会根据接入用户为用户自动分配MastKey和访问服务器用户。
步骤S2:下载2个jar包,一个是用户客户端的jar(sdk),一个是用户服务器端的jar文件。
步骤S3:开发人员首先商议服务端与客户机的通讯主题协议,而后客户端用户得到jar包后根据自己的协议编写客户机收到指令的动作,而服务器端开发人员得到jar后根据商议的主题编写发送指令动作。
步骤S4:在使用jar同时无论客户机开发人员还是服务器端人员,无需关心服务器-平台的用户与安全策略,只需要关心业务逻辑即可。
步骤S5:客户机开发完毕后与其他程序一起打包放入机器中,服务器端部署在tomcat中或者其他服务器即可。无需其他繁琐步骤。
通过上面具体实施方式,所述技术领域的技术人员可容易的实现本发明。但是应当理解,本发明并不限于上述的具体实施方式。在公开的实施方式的基础上,所述技术领域的技术人员可任意组合不同的技术特征,从而实现不同的技术方案。
除说明书所述的技术特征外,均为本专业技术人员的已知技术。
Claims (5)
1.一种基于Mqtt协议服务器实现方法,其特征在于,其实现过程为,
基于开源的Mosquitto服务器平台,使用Java作为开发框架,开发客户机与服务端的jar包,对Mosquitto服务器内行为规范做再次封装;
用户在平台注册之后得到封装的2个jar包,通过调用jar包内的方法,使客户机在Mosquitto服务器上订阅指令信息,当客户机收到服务端的指令时根据相应指令做出对应反应;
服务端jar包用于开发人员,调用jar中方法为客户端发送相应指令使客户机完成对应工作。
2.根据权利要求1所述的一种基于Mqtt协议服务器实现方法,其特征在于,客户端jar包用于客户机订阅及发布,接口开发者通过jar包中放出的接口进行订阅与发布操作。
3.根据权利要求1所述的一种基于Mqtt协议服务器实现方法,其特征在于,基于上述jar包,客户端与服务端之间的通信过程为:首先客户机根据jar包中定义的接口方法发布相应信息,MQTT服务器接收到信息并将信息推送给在服务器上订阅的相关读者,这时服务端根据编写的jar读取发送过来的信息,根据业务逻辑进行处理或者返回信息。
4.根据权利要求3所述的一种基于Mqtt协议服务器实现方法,其特征在于,通过jar包,客户端与服务端之间的具体通信过程为:
在客户机开机时首先调用缺省登录接口,客户机内部jar首先获得本机的ClientId与型号,并且拼写Topic与Messages,然后调用第三方开源jar获得MQTT服务器连接属性,连接成功后根据对应的Topic发送Messages信息;
Mosquitto代理服务器将收到的Topic和Messages发送给已经订阅的服务端;
在服务端接收到Messages后,根据对应的信息将此设备注册到Redis中,并返回对应的业务用户名与密码,至此完成了一次jar-服务器-jar的双层通信。
5.根据权利要求4所述的一种基于Mqtt协议服务器实现方法,其特征在于,在上述客户端与服务端之间的通信过程中,通过jar包,进行缺省登录的具体过程为:
首先在客户机jar中导入mqtt客户机包,在登陆时首先封装服务器需要的参数,将所有参数封装到MQTT类中,通过网络MQTT协议发送一个2进制包,包的大小以字节计算,当服务器接收到包的信息后将信息推送给已经订阅了此主题的其他服务端;
在服务端中,首先启动一个基于MQTT的监听器,同时在Mosquitto服务器上注册了此Topic的主题订阅,当Mosquitto服务器接收到客户机发来的Publish函数时,将接收到信息转发到服务端中,这时在服务端使用Runnable接口对象将数据中的Topic与Messages取出来进行下一步的逻辑处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710041498.XA CN106775772A (zh) | 2017-01-20 | 2017-01-20 | 一种基于Mqtt协议服务器实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710041498.XA CN106775772A (zh) | 2017-01-20 | 2017-01-20 | 一种基于Mqtt协议服务器实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106775772A true CN106775772A (zh) | 2017-05-31 |
Family
ID=58944913
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710041498.XA Pending CN106775772A (zh) | 2017-01-20 | 2017-01-20 | 一种基于Mqtt协议服务器实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106775772A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107797793A (zh) * | 2017-11-23 | 2018-03-13 | 山东浪潮商用系统有限公司 | 一种构建代理服务器框架的方法和装置 |
CN107861703A (zh) * | 2017-12-05 | 2018-03-30 | 神州租屏(厦门)网络技术有限公司 | 基于mqtt协议的面向屏幕的信息处理系统及实现方法 |
CN109302435A (zh) * | 2017-07-25 | 2019-02-01 | 腾讯科技(深圳)有限公司 | 消息发布方法、装置、系统、服务器及计算机可读存储介质 |
CN110351245A (zh) * | 2019-06-12 | 2019-10-18 | 深圳市奥克多普科技有限公司 | App推送消息sdk包的生成方法及推送消息系统 |
CN110557423A (zh) * | 2018-06-04 | 2019-12-10 | 珠海全志科技股份有限公司 | 一种消息推送方法及系统 |
TWI699104B (zh) * | 2017-08-30 | 2020-07-11 | 威摩科技股份有限公司 | 連網裝置及其控制系統與方法 |
CN113900834A (zh) * | 2021-09-24 | 2022-01-07 | 天津同阳科技发展有限公司 | 基于物联网技术的数据处理方法、装置、设备及存储介质 |
CN114900453A (zh) * | 2022-04-21 | 2022-08-12 | 成都陆迪盛华科技有限公司 | 在不同客户端之间下发音频监听指令的物联网式解决方法 |
CN115314484A (zh) * | 2022-06-15 | 2022-11-08 | 广州九尾信息科技有限公司 | 一种基于mqtt协议的局域网安卓测试包自动分发装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105099882A (zh) * | 2015-07-09 | 2015-11-25 | 杭州电子科技大学 | 一种基于mqtt的云推送方法和系统 |
-
2017
- 2017-01-20 CN CN201710041498.XA patent/CN106775772A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105099882A (zh) * | 2015-07-09 | 2015-11-25 | 杭州电子科技大学 | 一种基于mqtt的云推送方法和系统 |
Non-Patent Citations (2)
Title |
---|
HZLZC08: "MQTT初步使用", 《HTTP://BLOG.SINA.COM.CN/S/BLOG_67331D610102VY3E.HTML》 * |
MR_ORANGE_KLJ: "MQTT协议之使用Future模式订阅及发布(使用fusesource mqtt-client实现)", 《HTTPS://BLOG.CSDN.NET/MR_ORANGE_KLJ/ARTICLE/DETAILS/52831126》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109302435A (zh) * | 2017-07-25 | 2019-02-01 | 腾讯科技(深圳)有限公司 | 消息发布方法、装置、系统、服务器及计算机可读存储介质 |
TWI699104B (zh) * | 2017-08-30 | 2020-07-11 | 威摩科技股份有限公司 | 連網裝置及其控制系統與方法 |
CN107797793A (zh) * | 2017-11-23 | 2018-03-13 | 山东浪潮商用系统有限公司 | 一种构建代理服务器框架的方法和装置 |
CN107797793B (zh) * | 2017-11-23 | 2020-10-23 | 浪潮软件科技有限公司 | 一种构建代理服务器框架的方法和装置 |
CN107861703A (zh) * | 2017-12-05 | 2018-03-30 | 神州租屏(厦门)网络技术有限公司 | 基于mqtt协议的面向屏幕的信息处理系统及实现方法 |
CN110557423B (zh) * | 2018-06-04 | 2022-02-11 | 珠海全志科技股份有限公司 | 一种消息推送方法及系统 |
CN110557423A (zh) * | 2018-06-04 | 2019-12-10 | 珠海全志科技股份有限公司 | 一种消息推送方法及系统 |
CN110351245A (zh) * | 2019-06-12 | 2019-10-18 | 深圳市奥克多普科技有限公司 | App推送消息sdk包的生成方法及推送消息系统 |
CN113900834A (zh) * | 2021-09-24 | 2022-01-07 | 天津同阳科技发展有限公司 | 基于物联网技术的数据处理方法、装置、设备及存储介质 |
CN113900834B (zh) * | 2021-09-24 | 2023-02-14 | 天津同阳科技发展有限公司 | 基于物联网技术的数据处理方法、装置、设备及存储介质 |
CN114900453A (zh) * | 2022-04-21 | 2022-08-12 | 成都陆迪盛华科技有限公司 | 在不同客户端之间下发音频监听指令的物联网式解决方法 |
CN114900453B (zh) * | 2022-04-21 | 2023-11-17 | 成都陆迪盛华科技有限公司 | 在不同客户端之间下发音频监听指令的物联网式解决方法 |
CN115314484A (zh) * | 2022-06-15 | 2022-11-08 | 广州九尾信息科技有限公司 | 一种基于mqtt协议的局域网安卓测试包自动分发装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106775772A (zh) | 一种基于Mqtt协议服务器实现方法 | |
US11082421B2 (en) | Bootstrap mechanism for endpoint devices | |
Liu et al. | The method of Internet of Things access and network communication based on MQTT | |
WO2022011862A1 (zh) | 一种o-ran与mec的通信方法及系统 | |
KR101964532B1 (ko) | 복수의 디바이스들 상에서 복수의 명령들의 실행을 허용하는 것에 의해 강화되는, m2m 시스템에서의 서비스 레이어와 관리 레이어 사이의 동작들 | |
WO2011137788A1 (zh) | 设备管理方法、中间件及机器通信平台、设备和系统 | |
WO2010130165A1 (zh) | 一种基于互联网的开放式电信业务生成系统及方法 | |
CN105763619B (zh) | 客户端与服务端进行通讯的方法及装置 | |
CN107592367A (zh) | 家电设备的资源共享方法、装置和计算机可读存储介质 | |
Azzara et al. | Middleware solutions in WSN: The IoT oriented approach in the ICSI project | |
US20220103634A1 (en) | Device registration mechanism | |
WO2017040931A1 (en) | Methods and apparatus for enhancing native service layer device management functionality | |
CN113556359A (zh) | 一种通讯协议转换方法、设备、系统及网关设备 | |
CN102801544B (zh) | 一种物联网架构下统一终端管理的方法和系统 | |
US8918516B2 (en) | Symbiotic client and server for embedded network system | |
Xiao-Hong | Research and development of web of things system based on rest architecture | |
US12075525B2 (en) | Template-based registration | |
CN107483649A (zh) | 一种基于Kaa服务的跨平台日志采集方法 | |
Kang et al. | Android RMI: a user-level remote method invocation mechanism between Android devices | |
CN111466126B (zh) | 与受限设备的通信 | |
Cavalieri et al. | OPC UA integration into the Web | |
CN103888535A (zh) | 一种基于微信平台的位置信息处理方法和系统 | |
CN107566525A (zh) | 一种基于Kaa服务的跨平台数据上传、通知、配置方法 | |
Busquet et al. | A novel web service based home energy management system | |
CN108737525A (zh) | 一种基于REST架构的Web服务系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170531 |
|
RJ01 | Rejection of invention patent application after publication |