nodejs——js 实现webSocket 兼容移动端

 nodejs——js 实现webSocket 兼容移动端

//服务器端
//npm install --save ws 
const express = require('express');
const http = require('http');
const url = require('url');
const WebSocket = require('ws');

const app = express();

app.use(function (req, res) {
    res.send({ msg: "hello" });
});

const server = http.createServer(app);
const wss = new WebSocket.Server({ server });


var stocks = {
    "con1": 95.0,
    "con2": 50.0,
    "con3": 300.0,
    "con4": 550.0,
    "con5": 35.0
}
function randomInterval(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}
var stockUpdater;
var randomStockUpdater = function() {
    for (var symbol in stocks) {
        if(stocks.hasOwnProperty(symbol)) {
            var randomizedChange = randomInterval(-150, 150);
            var floatChange = randomizedChange / 100;
            stocks[symbol] += floatChange;
        }
    }
    var randomMSTime = randomInterval(500, 2500);
    stockUpdater = setTimeout(function() {
        randomStockUpdater();
    }, randomMSTime);
}
randomStockUpdater(); 

wss.on('connection', function (ws) {
    var sendStockUpdates = function (ws) {
        if (ws.readyState == 1) {
            var stocksObj = {};
            for (var symbol in clientStocks) {
                stocksObj[symbol] = stocks[symbol];
            }
            if (stocksObj.length !== 0) {
                ws.send(JSON.stringify(stocksObj));//需要将对象转成字符串。WebSocket只支持文本和二进制数据
                console.log("更新", JSON.stringify(stocksObj));
            }
        }
    }
    var clientStockUpdater = setInterval(function () {
        sendStockUpdates(ws);
    }, 5000);
    ws.on('message', function (message) {
        var stockRequest = JSON.parse(message);//根据请求过来的数据来更新。
        console.log("收到消息", stockRequest);
        clientStocks = stockRequest;
        sendStockUpdates(ws);
    });
});

server.listen(8080, function listening() {
    console.log('Listening on %d', server.address().port);
});
//客户端 vue,写成普通html 直接用浏览器访问也可以
   <template>
    <div>
        <button @click="check"> 启动 </button>
        <div id="con1"></div>
        <div id="con2"></div>
        <div id="con3"></div>
        <div id="con4"></div>
        <div id="con5"></div>
    </div>

</template>
<script>

    export default {
        data () {
            return {

            }
        },
        methods:{
            check(){


                var isClose = false;
                var stocks = {
                    "con1": 0, "con2": 0, "con3": 0, "con4": 0, "con5": 0
                };
                var WebSocketsExist = true;
                try {
                    var ws = new WebSocket("ws://10.20.11.180:8080");
                } catch (ex) {
                    try
                    {
                        ws = new MozWebSocket("ws://10.20.11.180:8080");
                    }
                    catch(ex)
                    {
                        WebSocketsExist = false;
                    }
                }

                if (WebSocketsExist) {
                    alert("您的浏览器支持WebSocket. 您可以尝试连接到聊天服务器!");
                } else {
                    alert("您的浏览器不支持WebSocket。请选择其他的浏览器再尝试连接服务器。");
                }

                function updataUI() {
                    ws.onopen = function (e) {
                        console.log('Connection to server opened');
                        isClose = false;
                        ws.send(JSON.stringify(stocks));
                        console.log("sened a mesg");
                    }
                    //更新UI
                    var changeStockEntry = function (symbol, originalValue, newValue) {
                        document.getElementById(symbol).innerHTML = symbol+' : '+newValue.toFixed(2);
                    }
                    // 处理受到的消息
                    ws.onmessage = function (e) {
                        var stocksData = JSON.parse(e.data);
                        console.log(stocksData)
                        console.log('-----------------------------------------');
                        for (var symbol in stocksData) {
                            if (stocksData.hasOwnProperty(symbol)) {
                                changeStockEntry(symbol, stocks[symbol], stocksData[symbol]);
                                stocks[symbol] = stocksData[symbol];
                            }
                        }
                    };
                }
                updataUI();
          }
        },
      
    }

</script>

https://www.cnblogs.com/stoneniqiu/p/5402311.html

原文地址:https://www.cnblogs.com/web-fusheng/p/8723350.html