Web页面通过MQTT协议与服务器交互,Mosca安装测试

在服务器上安装node的执行环境和mosca库

yum install nodejs
yum install zeromq-devel

记得设置环境变量,否则可能会找不到模块的安装路径
vi  /root/.bashrc 在文件末尾添加如下这一行
export NODE_PATH=/usr/lib/node_modules


mkdir devel
cd  devel

npm install china-time -g
npm install log4js -g
npm install redis -g

npm install --save  mosca


npm install forever -g

//node  mqttserver.js
forever -a -l /home/mqttmosca/log.txt start mqttserver.js 

mqttserver.js源码如下:

需要说明一下的就是,源码中的6000端口代表的就是mqtt server的监听端口,  mqtt的客户端 发布消息就往这个端口发。但是web 页面不一样,web页面是与9080端口交互, web页面发布消息是先发送到9080的web server上,然后再通过6000端口发送给订阅者。

var mosca = require('mosca');
var MqttServer = new mosca.Server({
    port: 6000,
    http: {
        port: 9080,
        bundle: true,
        static: './'
        }
});

MqttServer.on('ready', function(){
    console.log('mqtt is running...');
    //MqttServer.authenticate = authenticate;
});

MqttServer.on('clientConnected', function(client){
    console.log('client connected', client.id);
}); 

MqttServer.on('clientDisconnected', function (client) {
    console.log('Client Disconnected     := ', client.id);
});


MqttServer.on('subscribed', function (topic, client) {
    console.log("Subscribed :=", topic, client.id);
});

MqttServer.on('unsubscribed', function (topic, client) {
    console.log('unsubscribed := ', topic, client.id);
});



MqttServer.on('published', function(packet, client) {
    
    if (typeof (client) == "undefined")
	return;

    else
	console.log('client ', client.id, ' publish :', 'topic ='+packet.topic+ ',message = '+ packet.payload.toString());

}); 


MqttServer.on("error", function (err) {
    console.log(err);
});

index.html源码如下:



	
		
		
	
	
		
		
		
		
	
	
	
	
	


这样就可以与服务器进行即时消息的交互了,并且没有跨域的问题。

可以用mosquitto_pub 发布消息进行测试

你可能感兴趣的:(Web页面通过MQTT协议与服务器交互,Mosca安装测试)