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); |