웹 페이지는 MQTT 프로토콜을 통해 서버와 상호작용, Mosca 설치 테스트

4486 단어
서버에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 서버의 감청 포트를 대표하고 mqtt 클라이언트가 메시지를 발표하면 이 포트로 보낸다는 것이다.그러나 웹 페이지는 다르다. 웹 페이지는 9080 포트와 상호작용을 하고 웹 페이지 발표 메시지는 9080의 웹 서버에 먼저 보낸 다음에 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 소스는 다음과 같습니다.


	
		
		
	
	
		<input type="text" id="msg"/>
		<input type="button" value=" " onclick="subscribe()"/>
		<input type="button" value=" " onclick="send()"/>
		<input type="button" value=" " onclick="unsubscribe()"/>
	
	<script src="https://code.jquery.com/jquery-3.3.1.min.js"/>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js"/>
	
	<script>
		var hostname = '192.168.1.2',
		port = 9080,
		clientId = 'clientmao2080',
		timeout = 5,
		keepAlive = 50,
		cleanSession = false,
		ssl = false,
		userName = 'admin',
		password = 'password',
		topic = 'vulsun';
		client = new Paho.MQTT.Client(hostname, port, clientId); 
	
		var options = {
			invocationContext: {
				host : hostname,
				port: port,
				path: client.path,
				clientId: clientId
			},
			timeout: timeout, 
			keepAliveInterval: keepAlive, 
			cleanSession: cleanSession, 
			useSSL: ssl, 
			userName: userName,
			password: password,
			onSuccess: onConnect,
			onFailure: function(e){
				console.log(e);
			}
		};
		
		client.connect(options); 

		function onConnect() {
			console.log("onConnected");
			
		}
	
		client.onConnectionLost = onConnectionLost; 

		client.onMessageArrived = onMessageArrived; 

		function onConnectionLost(responseObject) {
			console.log(responseObject);
			if (responseObject.errorCode !== 0) {
				console.log("onConnectionLost:"+responseObject.errorMessage); 
				console.log(" "); 
			}
		} 
	
		function onMessageArrived(message) { 
			console.log(" :"+message.payloadString); 
		} 
	
		function send(){
			var s = document.getElementById("msg").value;
			if(s.length > 0){

				message = new Paho.MQTT.Message(s);
				message.destinationName = topic;
				client.send(message);
				document.getElementById("msg").value = "";
				console.log(" "+s);
			}
			else {
				alert(" ");
			}
		}
	
		var count = 0;
	
		function subscribe(){
			client.subscribe(topic, { qos: 2});
			console.log(" :"+topic); 

		}
		
		function unsubscribe(){

			client.unsubscribe(topic);
			console.log(" :"+topic); 
		}
	
		
	</script>


</code></pre> 
  <p> , 。</p> 
  <p> mosquitto_pub  </p> 
 </div> 
</div>
                            </div>
                        </div>

좋은 웹페이지 즐겨찾기