mqtt 服务器与客户端通讯。

服务器端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* Created by niyl on 2016/1/13.
*/
 
var mosca = require('mosca');
var MqttServer = new mosca.Server({
port: 8000
});
/**
* 验证方法
*
**/
var authenticate = function(client, username, password, callback) {
//var authorized = (username.toString() === '18FE34F48379-DC' && password.toString() === '666666');
var authorized = (password.toString() === '666666');
if (authorized){
//存储设备类型
client.type = username.toString().split('-')[1];
}
callback(null, authorized);
}
 
 
//
 
MqttServer.on('clientConnected', function(client){
console.log('client connected', client.id);
});
 
/**
* 监听MQTT主题消息
**/
MqttServer.on('published', function(packet, client) {
var topic = packet.topic;
// console.log('message-arrived--->','topic ='+topic+',message = '+ packet.payload.toString());
switch(topic){
case 'pubMsg':
console.log('message-publish', packet.payload.toString());
//MQTT转发主题消息
MqttServer.publish({topic: 'other', payload: 'hello'});
//发送消息NODEJS
console.log('HD: ');
//发送socket.io消息
//io.sockets.socket(YHSocketMap.get('1000')).emit('subState', packet);
break;
case 'other':
console.log('message-123', packet.payload.toString());
break;
case 'order':
console.log('order', packet.payload.toString());
 
break;
case 'test':
console.log('test', packet.payload.toString());
break;
}
 
 
});
 
MqttServer.on('ready', function(){
console.log('mqtt is running...');
//MqttServer.authenticate = authenticate;
});

客户端程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var mqtt = require('mqtt');
 
 
var client = mqtt.createClient(8000, 'localhost',{clientId:'1',clean:false});
//向服务器订阅一个主题
client.subscribe('other',{qos:1});
client.subscribe('test',{qos:1});
//当消息到达时
var yy=0;
var ww=0;
client.on('message', function (topic, message) {
var tt=(message.toString());
console.log(tt);
switch(tt)
{
case 'redd' :
ww++;
console.log(10000-ww);
break;
case 'hello' :
yy++;
console.log(yy);
break;
}
 
});
// PUBLISH-发布消息
var num=0;
setInterval(function (){
client.publish('order', ' ' + (num++),{qos:1, retain: true});
console.log("num="+num);
}, 5000);
setInterval(function(){
client.publish('pubMsg', 'send ' );
// console.log("PubMsg");
},10000);
setInterval(function(){
client.publish('test', 'redd' );
// console.log("test");
},20000);
 
 
var start=Date.now();
console.log("服务端"+start);

mqtt 服务器与客户端通讯的更多相关文章

  1. 一个基于TCP/IP的服务器与客户端通讯的小项目(超详细版)

    1.目的:实现客户端向服务器发送数据 原理: 2.建立两个控制台应用,一个为服务器,用于接收数据.一个为客户端,用于发送数据. 关键类与对应方法: 1)类IPEndPoint: 1.是抽象类EndPo ...

  2. Netty——简单创建服务器、客户端通讯

    Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程 ...

  3. C# MQTT 服务端客户端通讯

    关于MQTT 在这里我就不做过多的介绍了 , 超时空连接点我 MQTT示例 注: 该示例演示统一使用WPF, 简单MVVM模式演示, 复制代码需注意引用 NuGet包  GalaSoft MQTT服务 ...

  4. Android BLE与终端通信(四)——实现服务器与客户端即时通讯功能

    Android BLE与终端通信(四)--实现服务器与客户端即时通讯功能 前面几篇一直在讲一些基础,其实说实话,蓝牙主要为多的还是一些概念性的东西,当你把概念都熟悉了之后,你会很简单的就可以实现一些逻 ...

  5. MQTT——服务器搭建(一)

    MQTT介绍 MQTT,是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器和控制设备: 轻量级的消息订阅和发布(publish/subscribe)协议 建 ...

  6. mqtt服务器apollo的搭建和测试工具paho的使用

    (1)前言 MQTT协议是IBM开发的一个即时通讯协议; 基于发布/订阅的消息协议,近些年来被广泛应用于能源.电力.....等硬件性能低下的远程设备,此外国内很多企业使用MQTT作为android手机 ...

  7. 常见MQTT服务器搭建[转载]

    简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程传感器和控制设备通 ...

  8. 快速搭建MQTT服务器(MQTTnet和Apache Apollo)

    前言 MQTT协议是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分,http://mqtt.org/. MQTT is a machine-to-machine (M2M)/" ...

  9. 常见MQTT服务器搭建与试用

    常见MQTT服务器搭建与试用   简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠 ...

随机推荐

  1. Android开发:keytool' 不是内部或外部命令 也不是可运行的程序

    今天在更改keystore密码的时候,发生了这个问题:keytool' 不是内部或外部命令 也不是可运行的程序. 本来以为很简单觉得的问题,在网上搜索了一大堆答案,都不是我想要的,故在此记录下我的解决 ...

  2. HDOJ 1814 Peaceful Commission

    经典2sat裸题,dfs的2sat能够方便输出字典序最小的解... Peaceful Commission Time Limit: 10000/5000 MS (Java/Others)    Mem ...

  3. SQL数据库,如何把服务器中的一张表插入到另外一个服务器的一张表中

    先开启 exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Qu ...

  4. java clone对象

    本文转载至 http://blog.csdn.net/shootyou/article/details/3945221 现在Clone已经不是一个新鲜词语了,伴随着“多莉”的产生这个词语确实很“火”过 ...

  5. LPD打印机服务是什么意思

    line Printer Daemon(LPD)行式打印机后台程序,用于假脱机打印工作的UNIX后台程序(后台服务).行式打印机后台程序是一个安装在UNIX打印服务器上的后台程序.它的功能是等待接受客 ...

  6. Entity Framework应用:Loading Entities

    Entity Framework允许控制对象之间的关系,在使用EF的过程中,很多时候我们会进行查询的操作,当我们进行查询的时候,哪些数据会被加载到内存中呢?所有的数据都需要吗?在一些场合可能有意义,例 ...

  7. CSS 超出隐藏实现限制字数的功能代码(多浏览器支持)

    <html> <title>css控制字数</title> <head> <style type="text/css"> ...

  8. C# 发邮件 服务器响应为: 5.7.0 Must issue a STARTTLS command first

    The SMTP server requires a secure connection or the client was not authenticated. The server respons ...

  9. Erlang TCP Socket的接收进程的2种方案

    转自:http://blog.csdn.net/summerhust/article/details/8740973 一旦打开了一个使用TCP连接的套接字,它就始终保持打开状态,直至任何一方关闭它或因 ...

  10. CentOS运维常用管理操作命令

    自己整理的整理Linux常用运维和linux常用管理操作命令,当然不是非常详细和丰富,但是也基本上够用了吧.欢迎留言补充更多的Linux常用运维和linux常用管理操作命令.不断完善中.... 备份m ...