MQTT及Webscoket的介绍及使用

MQTT是为了物联网场景设计的基于TCP的Pub/Sub协议,有许多为物联网优化的特性,好比适应不一样网络的QoS、层级主题、遗言等等。node

WebSocket是为了HTML5应用方便与服务器双向通信而设计的协议,HTTP握手而后转TCP协议,用于取代以前的Server Push、Comet、长轮询等老旧实现。web


MQTT:

一般用于 IOT 设备上(做为MQTT Client),基于 TCP 有一套本身的协议栈格式。MQTT Server[也称为 MQTT broker]一般在 PC 上。// blog.csdn.net/benhuo93111…
MQTT Client 和 MQTT Server 一般扮演多对多的角色。 一个 Client 发布消息,多个 Client 将会收到该消息。express

WebSocket:

一般用户 PC 上,Websocket也是基于 TCP 协议的,同时借用了HTTP的协议来完成一部分握手。
主要解决 HTTP 协议中一个 request 对应一个 response 的尴尬。(http server 不能主动发送消息给 http client)
www.zhihu.com/question/20…
经过 HTTP 完成 websocket 的握手过程,接着按照 websocket 协议进行通信。
websocket 也有他本身的数据帧格式: blog.csdn.net/u010487568/…bash

MQTT over websocket:

这种场景通常用户 IOT 设备和 PC 设备间的通信。// blog.csdn.net/itzaibadong…
好比: IoT 做为 MQTT Client, Mosquitto 做为 MQTT Server, PC 做为 websocket client.服务器

下面是可能的一种通信过程:
// Mosquitto1.4.2 以上支持 websocket。
1: PC 先经过 websocket协议和 mosquitto 创建链接,同时订阅主题 A.
2: IOT 设备经过 MQTT协议和 mosquitto 创建链接。
3: IOT 设备发布主题 A
4: mosquitto 将主题 A 发布到它全部的客户端,包括 websocket 客户端,因此 PC 也能收到主题 A.websocket




mqtt的使用cookie

开启链接,订阅主题网络

window.client = new Paho.MQTT.Client(hostname, port, clientId);
console.log(client.path);
let options = {
    invocationContext: {
        host: hostname,
        port: port,
        path: client.path,
        clientId: clientId
    },
    //timeout: timeout,
    //keepAliveInterval: keepAlive,
    //cleanSession: cleanSession,
    //useSSL: ssl,
    userName: userName,
    password: password,
    onSuccess: function(){
        console.log("onConnected");
        client.subscribe(topic);
    },
    onFailure: function (e) {
        console.log(e);
        setTimeout(function () {
            startConnect(clientId,topic)
        },timeout)
    }
};
try {
    client.connect(options);
} catch (e) {
    console.log("链接失败");
    console.log(e.message);
}
client.onConnectionLost = onConnectionLost;
function onConnectionLost(responseObject) {
    console.log(responseObject);
    if (responseObject.errorCode !== 0) {
        console.log("onConnectionLost:" + responseObject.errorMessage);
        console.log("链接已断开");
    }
}复制代码

发送消息session

let message = new Paho.MQTT.Message(msg);
message.destinationName = topic;
message.qos = qos;
client.send(message);复制代码

接收消息app

client.onMessageArrived = function (message) {
   console.log({"data":new Date().getTime(),"msg":message.payloadString});
};复制代码




webscoket的使用

开启链接及各个事件

var wsServer = new WebSocket('ws://localhost:8000');

wsServer.onopen = function (e) {
    if(times==0){
        times++;
        wsServer.send(JSON.stringify(msg));
    }

    (typeof e == 'string') && wsServer.send(JSON.stringify(msg));//向后台发送数据
};
wsServer.onclose = function (e) {//当连接关闭的时候触发

};
wsServer.onmessage = function (e) {//后台返回消息的时候触发

    console.log(e);
};
wsServer.onerror = function (e) {//错误状况触发

};复制代码



这是基于node的webscoket服务器

(草稿代码)
var express = require('express');
var http = require('http');
var WebSocket = require('ws');
var session = require('express-session');
var app = express();

app.use(session({
    secret: 'sessiontest',//与cookieParser中的一致
    resave: true,
    saveUninitialized:true
}));
app.use(express.static(__dirname));
var server = http.createServer(app);
var wss = new WebSocket.Server({server});
var webSockets = {};
wss.on('connection', function connection(ws) {
    console.log('连接成功!');
    console.log(ws);
    /*webSockets[userid] = ws;*/
    ws.on('message', function incoming(data) {
        var userid = JSON.parse(data).userid;
        var to = JSON.parse(data).to;
        var msg = JSON.parse(data).msg;
        webSockets[userid] = ws;
        
        
        if(webSockets[to]!=undefined){
            webSockets[to].send(data)
        }else {
            webSockets[userid].send(to+':未上线')
        }
        /**
         * 把消息发送到全部的客户端
         * wss.clients获取全部连接的客户端
         */
       /*  wss.clients.forEach(function each(client) {
              client.send(data);
         });*/
       /* console.log(webSockets[to])*/

    });
});

server.listen(8000, function listening() {
    console.log('服务器启动成功!');
});
复制代码
相关文章
相关标签/搜索