mqtt实现自动监听服务器消息
本示例借助meteor的一个环境跑,和我们平时用的node自己搭的环境或java,php的环境本质一样,在此不多讨论。
首先需求是:多系统对接进行消息实时传递。
安装好mqtt: npm install mqtt --save
本地服务(可以直接配在java中):这里采用mosca
安装好mosca: npm install mosca --save
- var mosca=reqire('mosca');
- var mqttServer=new mosca.Server({port:8000}); //设置监听端口
- //published监听所发布的消息
- mqttServer.on('published',function(packet,client){
- console.log('published----',packet);
- switch(packet.topic){ //topic字段是消息主题,可以理解为接口中的方法名
- case 'test': //不同的订阅主题,发布消息不同
- console.log(packet.payload.toString());
- mqttServer.publish({topic:'other',payload:'测试不同主题!'});
- break;
- case 'other':
- console.log(packet.paload.toString());
- break;
- }
- });
//服务开启时给个提示:- mqttServer.on('ready',function(){
- console.log('Mosca server is running ... ');
- });
订阅消息(接收):
- var mqtt=require('mqtt');
- var client=mqtt.connect('tcp://172.19.5.217:8000'); //本地建立连接
- //模拟一个消息发送
- var msg={talk:'this is test!!',name:'测试'};
- //轮洵发送,仅做测试用,实际场景不需要轮洵
- setInterval(function(){
- client.publish('test',JSON.stringify(msg),{qos:1,retain:true}); //发布一条主题为test的消息,
- },60000);
- client.subscribe('test'); //订阅主题为test的消息
- client.on('message',function(topic,message){
- var result=JSON.parse(message.toString()); //接收到新消息,并对其进行处理
- try{
- console.log('result---->',result);
- //****do something ****
- }catch(e){
- console.log('error---->',result);
- }
- })
publish()方法接收四个参数publish(topic,message,[options],[callback]);
topic: 消息主题;
message:传递的消息;
options:指定参数值:qos :服务质量级别,默认为0 (消息最多发送一次,不管是否接收到)
retain:默认为false,推送至当前订阅就释放这条消息。设为true,表示服务器要保留这次推送的信息,如果新的订阅者出现,就把这条消息推送给它。
dup:保证消息可靠传输,默认为false,只占用一个字节,表示第一次发送。不能用于检测消息重复发送等。注意需要满足以下条件:
1.当QoS > 0,即消息至少传递一次)
2.消息需要回复确认。
- 此时,在可变头部需要包含消息ID(即client.id)。当值为1时,表示当前消息先前已经被传送过。
这样一个简单的消息监听功能就做好了,我这边是做一个接收消息自动发送功能,效果如下:
由于我做即时聊天有用到websocket,与mqtt都是与服务器保持长连接,进行消息传递。那么,来对比一下MQTT和WebSocket有什么区别?
MQTT具备以下特点:
1.采用发布/订阅消息传输协议,设计思想开放,简单,轻量。
2.网络代码高,比较依赖网络。
3.有三种服务质量:至多一次,只有一次,至少一次。前两者会有风险,后者会负载过重。
WebSocket的不同在于:
1.提供使用一个TCP连接进行双向通讯机制,包括网络协议和API,以取代网页和服务器采用HTTP轮询进行双向通讯。
2.借用HTTP和HTTPS端口,与TCP建立连接和关闭连接时握手。传输消息采用TCP协议。
具体应用时,我们只需要根据实现场景及两者的特点,选择更合适的通讯方式即可。
mqtt实现自动监听服务器消息的更多相关文章
- Rabbitmq无法监听后续消息
现象: 消息队列在处理完一条消息后,无法继续监听后续消息. 首先,系统启动时要启动接收方法如下: protected void Application_Start() { RouteTable.Rou ...
- 让webStorm支持自动监听编译scss文件
前提概要 今日,重装了两波系统,,,之前安装的各种环境都忘光了,重新又踩一次坑的感觉很不舒服,所以记录一下配置自动编译scss一路遇到的坑 一.webstrom run的时候控制台输出的错误中文提示乱 ...
- 基于Zookeeper实现客户端动态监听服务器上下线
一.在具体实现之前,先来了解一下Zookeeper的监听器的原理: 图中Main()线程作为客户端,当在主线程中创建Zookeeper客户端时,会默认创建两个子线程:Listener和connect, ...
- Linux下安装oracle遇到启动监听服务器启动失败
1.发现监听服务器没有启动,则 lsntctl start 启动监听服务器: 2.发现TNS-12555问题: 3.查找TNS-12555错误,找到一个满意的答案: chmod 777 /var/ ...
- Jmeter无法监听服务器4444端口
阿里云服务器开放了4444端口 jmeter还是无法监听: 解决方法: 阿里云安全组添加端口5555 服务器中启动监听插件使用5555端口,使用命令:java -jar ./CMDRunner.jar ...
- golang监听rabbitmq消息队列任务断线自动重连接
需求背景: goalng常驻内存任务脚本监听rbmq执行任务 任务脚本由supervisor来管理 当rabbitmq长时间断开连接会出现如下图 进程处于fatal状态 假如因为不可抗拒因素,rabb ...
- 使用Jmeter创建ActiveMQ JMS POINT TO POINT请求,环境搭建、请求创建、插件安装、监听服务器资源等
转自:http://www.cnblogs.com/qianyiliushang/p/4348584.html 准备工作: 安装JDK,推荐使用1.7以上版本,并设置JAVA_HOME 下载Jmete ...
- 转: 使用Jmeter创建ActiveMQ JMS POINT TO POINT请求,环境搭建、请求创建、插件安装、监听服务器资源等
转自:http://www.cnblogs.com/qianyiliushang/p/4348584.html 准备工作: 安装JDK,推荐使用1.7以上版本,并设置JAVA_HOME 下载Jmete ...
- 【转】]监听SMS消息/编程实现短信拦截
当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent.注意,这个动作是一个字符串值,SDK 1.0不再包 ...
随机推荐
- Linux 下实时查看日志
Linux 下实时查看日志 cat /var/log/*.log 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /v ...
- 深入浅出数据结构C语言版(12)——从二分查找到二叉树
在很多有关数据结构和算法的书籍或文章中,作者往往是介绍完了什么是树后就直入主题的谈什么是二叉树balabala的.但我今天决定不按这个套路来.我个人觉得,一个东西或者说一种技术存在总该有一定的道理,不 ...
- Python网络数据采集2-wikipedia
Python网络数据采集2-wikipedia 随机链接跳转 获取维基百科的词条超链接,并随机跳转.可能侧边栏和低栏会有其他链接.这不是我们想要的,所以定位到正文.正文在id为bodyContent的 ...
- javascript 用Activex方法调用数据库中的数据,只可用于IE
// JavaScript source code //创建数据库连接对象 var conn = new ActiveXObject("ADODB.Connection"); // ...
- selenium+java破解极验滑动验证码
摘要 分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码. 人工验证的过程 打开威锋网注册页面(https://passport.feng.com/?r=user/r ...
- animate.css的使用
前面的话 animate.css是一个使用CSS3的animation制作的动画效果的CSS集合,里面预设了很多种常用的动画,且使用非常简单.本文将详细介绍animate.css的使用 引入 anim ...
- 【有意思的BUG】后端多处数据校验 前端数据校验
软件(尚处在开发阶段的软件)会犯许多低级的错误,这些错误以你在生活中的经验而言简直莫名其妙.往往你认为这个小功能怎么可能有BUG呢,是的,你猜对了!! 拿1个简单的结构举例:后端页面[1]+后端页面[ ...
- ssm框架的搭建实现CRUD的操作
最近在开发公司的一个系统,系统的框架是用ssm的框架搭建的,当然和这次写博客的不一样,它拥有很多的配置文件,企业级的开发所需要的配置文件是非常繁琐的,今天记录一下一个简单的SSM框架的搭建和实现一个C ...
- Linux学习总结(十四)—— 查看CPU信息
文章首发于[博客园-陈树义],点击跳转到原文Linux学习总结(十四)-- 查看CPU信息. Linux学习总结(十四)-- 查看CPU信息 商用服务器CPU最常用的是 Intel Xeon 系列,该 ...
- nGrinder 简易使用教程
背景 性能压测工具之前使用的是jmeter,这次说的是nGrinder,先直接搬运两者之间的比较 比较点 JMeter nGrinder 结果 实现语言 Java Java = License Apa ...