• 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

  • 相关阅读:
    线程带参数操作
    静态页面不识别include
    当网站遭遇DDOS攻击的解决方案及展望
    带进度条上传控件
    用js实现了表格数据管理的以下几个功能:
    怎么面试一个人
    map的使用
    在Axapta中实现trim函数
    Axapta财务过账分析(一)
    在Axapta中实现split函数
  • 原文地址:https://www.cnblogs.com/web-fusheng/p/8723350.html
Copyright © 2020-2023  润新知