websocket的使用

websocket的入门教程推荐阮一峰的 http://www.ruanyifeng.com/blog/2017/05/websocket.html

 

我的实际使用

 


// webSocket连接未创建或者不是连接成功的状态,重新连接
var webSocketUrl = "ws://localhost:8085/device/GasDetection"

var ws = null;
if ('WebSocket' in window) {
    ws = new WebSocket(webSocketUrl);
}
else if ('MozWebSocket' in window) {
    ws = new MozWebSocket(webSocketUrl);
}
else {
    ws = new SockJS(socketJsUrl);
}

ws.onopen = function (evt) {
     console.log("websocket连接成功");
}

ws.onmessage = function(evt) {
    console.log( "websocket消息: " , JSON.parse(evt.data));
    var data = JSON.parse(evt.data)
    if(data.type === "STATUS"){
        var subData = data.data;
        var subString = ''
        $.each(subData,function(ind,va){
            subString += '<p><span>'+va.name+'</span> : <span>'+va.value+'</span><span>'+va.unit+'</span></p>'
        })
        var imgLocat = '<p>'+data.deviceName+'</p>'+
                        '<p>'+data.dateTime+'</p>'+
                        '<div class="sonDiv">' +
                          subString+
                        '</div>'
        $('#'+data.deviceId+'').html(imgLocat);

        // 重新渲染煤气监控点实时数据图表
        reloadGasDetectionChart(data);
    }else if(data.type === "WARNING"){
        console.log("预警消息:",JSON.parse(evt.data));
        var top = 50;
        top += 30;
        var policeData = JSON.parse(evt.data);
        var dd = '<div class="police-pop">'+
            '<div class="pop-left">'+
            '<img src="img/jinggao.png" alt="">'+
            '</div>'+
            '<div class="pop-right">'+
            '<div class="pop-box" style="position:relative">'+
            '<span class="pop-title">'+policeData.deviceTypeName+'</span>'+
              '<span class="pop-time">'+policeData.dateTime+'</span>'+
            '<span class="pop-close" style="position:absolute;right:0;"><img src="img/close.png" alt=""></span>'+
            '</div>'+
            '<div class="pop-detail">'+policeData.message+'</div>'+
            '</div>'+
            '</div>'
         $('#popWrap').append(dd)
        $('.police-pop').slideDown(600).delay(2000).hide(600,function(){
            $(this).remove()
        })
        $('.pop-close').click(function(){
            $(this).parent().parent().parent().remove()
        })
    }
};

ws.onclose = function(evt) {
    console.log("Connection closed.");
};

/**
 * 重新加载煤气监控点实时数据图表
 */
function reloadGasDetectionChart(data) {
    // 更新x轴坐标
    var time = data.dateTime.substring(10);
    var xAxisLength = gasDetection.xAxis.length;
    if(xAxisLength === 20){
        var tempAxis = gasDetection.xAxis.slice(1);
        tempAxis.push(time);
        gasDetection.xAxis = tempAxis;
    }else{
        gasDetection.xAxis.push(time);
    }
    // 更新y轴坐标
    var points = data.data;
    var series = gasDetection.series;
    for(var i in points){
        var point = points[i];
        var encoding = data.deviceId + '-' + point.encoding;
        var targetPoint = findTargetPoint(series, encoding);
        if(targetPoint === null){
            targetPoint = {
                name: data.deviceName + '' + point.name,
                encoding: encoding,
                type:'line',
                data:[]
            };
            if(series.length > 0 && !series[0].encoding.startsWith(data.deviceId)){
                for(var j = 0;j < series[0].data.length; j++){
                    targetPoint.data.push(0);
                }
            }
            series.push(targetPoint);
        }
        if(targetPoint.data.length === 20){
            var tempData = targetPoint.data.slice(1);
            tempData.push(point.value);
            targetPoint.data = tempData;
        }else{
            targetPoint.data.push(point.value);
        }

    }
    for(var z in series){
        var seriesItem = series[z];
        var seriesItemDataLength = seriesItem.data.length;
        if(!seriesItem.encoding.startsWith(data.deviceId)){
            var lastValue = seriesItem.data[seriesItemDataLength - 1];
            if(seriesItemDataLength === 20){
                var tempData = seriesItem.data.slice(1);
                tempData.push(lastValue);
                seriesItem.data = tempData;
            }else{
                seriesItem.data.push(lastValue);
            }
        }
    }

    // 重新渲染图表
    initGasDetectionChart();
}

/**
 * 查找指定编码的点
 * @param points
 * @param encoding
 */
function findTargetPoint(points, encoding) {
    for(var i in points){
        if(points[i].encoding === encoding){
            return points[i];
        }
    }
    return null;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值