我一直在开发家庭自动化系统场景:

ESP8266发送保持活动到Rasp pi MQTT服务器

使用IBM实用程序javascript Paho客户端在Chrome上的网页

ESP每隔10秒发送一次活动,并在收到包含接收时间的消息时显示,这证明服务器正在按时发送消息 .

网页(也有计时器)显示随消息一起收到的消息

消息是以随机的方式在网页上接收的,我的意思是没有消息长时间到达然后从esp同时到达所有消息我可以看到消息在发布时被接收 . 网页代码中似乎存在问题我只是想知道是否有人之前已经看过这个并且可以指出我正确的方向,我的代码如下:

提前谢谢戴夫

/*
Original Copyright (c) 2015 IBM Corp.
Eclipse Paho MQTT-JS Utility
This utility can be used to test MQTT brokers
its been bent by me to fit my needs
*/

// global variables
	var MyLib = {};			// space for my bits
	MyLib.theMessage	= "";			// received message
	MyLib.theTopic		= "";			// received topic
	MyLib.clientId		= 'webRunpage2' + (Math.random() * 10);
	MyLib.connected		= false;
	MyLib.ticker		= setInterval(function(){MyLib.tickTime ++;}, 1000);	// 5secs 
	MyLib.tickTime		= 0;
	MyLib.aliveTimer	= setInterval(function(){keepMeAlive()}, 90000);	// 1.5 mins
//=============================================================
function keepMeAlive() {
	var topic='webpage', message='KeepAlive';
	publish(topic, 1, message, false);	// keeps the conection open
	console.info("Alive Time: ", MyLib.tickTime);
}
//=============================================================
function onMessageArrived(message) {
	MyLib.theTopic = message.destinationName; 	MyLib.theMessage = message.payloadString;
	var topic = MyLib.theTopic;		
	var messg = MyLib.theMessage;
	var id = messg.substring(0,6); 
	console.log('Message Recieved: Topic: ', message.destinationName, "Time ", MyLib.tickTime);
}
//=============================================================
function onFail(context) {
  console.log("Failed to connect");
  MyLib.connected = false;
}
//=============================================================
function connectionToggle(){
  if(MyLib.connected){ disconnect();
  } else { connect(); }
}
//=============================================================
function onConnect(context) {
  // Once a connection has been made
	console.log("Client Connected");
	document.getElementById("status").value = "Connected";
	MyLib.connected = true;
	client.subscribe('LIGHTS/#');  // subscribe to all 'LIGHTS' members
}
//=================================================
	// called when the client loses its connection
	function onConnectionLost() {
		console.log("Connection Lost: ");
		document.getElementById("status").value = "Connection Lost";
		MyLib.connected = false;
		connectionToggle();
	}
//=============================================================
function connect(){
    var hostname = "192.168.1.19";
    var port = 1884;
    var clientId = MyLib.clientId;
    var path = "/ws";
    var user = "dave";
    var pass = "vineyard01";
    var keepAlive = 120;			// 2 mins stay alive
    var timeout = 3;
    var ssl = false;
    var cleanSession = true;		//*******************
    var lastWillTopic = "lastwill";
    var lastWillQos = 0;
    var lastWillRetain = false;
    var lastWillMessage = "its Broken";

    if(path.length > 0){
      client = new Paho.MQTT.Client(hostname, Number(port), path, clientId);
    } else {
      client = new Paho.MQTT.Client(hostname, Number(port), clientId);
    }
   // console.info('Connecting to Server: Hostname: ', hostname, '. Port: ', port, '. Path: ', client.path, '. Client ID: ', clientId);
    // set callback handlers
    client.onConnectionLost = onConnectionLost;
    client.onMessageArrived = onMessageArrived;
    var options = {
      invocationContext: {host : hostname, port: port, path: client.path, clientId: clientId},
      timeout: timeout,
      keepAliveInterval:keepAlive,
      cleanSession: cleanSession,
      useSSL: ssl,
      onSuccess: onConnect,
      onFailure: onFail
    };
    if(user.length > 0){ options.userName = user; }
    if(pass.length > 0){ options.password = pass; }

    if(lastWillTopic.length > 0){
      var lastWillMessage = new Paho.MQTT.Message(lastWillMessage);
      lastWillMessage.destinationName = lastWillTopic;
      lastWillMessage.qos = lastWillQos;
      lastWillMessage.retained = lastWillRetain;
      options.willMessage = lastWillMessage;
    }

    // connect the client
    client.connect(options);
}
//=============================================================
function disconnect(){
   // console.info('Disconnecting from Server');
    client.disconnect();
    MyLib.connected = false;
}
//=============================================================
function publish(topic, qos, message, retain){
//	console.info('Publishing Message: Topic: ', topic, '. QoS: ' + qos + '. Message: ', message, '. Retain: ', retain);
    message = new Paho.MQTT.Message(message);
    message.destinationName = topic;
    message.qos = Number(qos);
    message.retained = retain;
    client.send(message);
}
//=============================================================
function subscribe(topic){
    var qos = 1;
    client.subscribe(topic, {qos: Number(qos)});
}
//=============================================================
// left next 4 functions but not used
function unsubscribe(topic){
    client.unsubscribe(topic, {
         onSuccess: unsubscribeSuccess,
         onFailure: unsubscribeFailure,
         invocationContext: {topic : topic}
     });
}
//=============================================================
function unsubscribeSuccess(context){
 //   console.info('Successfully unsubscribed from ', context.invocationContext.topic);
}
//=============================================================
function unsubscribeFailure(context){
//    console.info('Failed to  unsubscribe from ', context.invocationContext.topic);
}

//=============================================================
// Just in case someone sends html
function safe_tags_regex(str) {
   return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
}
//=============================================================