前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django websocket 自动推送

Django websocket 自动推送

作者头像
以谁为师
发布2023-09-12 09:41:11
1850
发布2023-09-12 09:41:11
举报

后端代码

代码语言:javascript
复制
class SystemInfoConsumer(AsyncWebsocketConsumer):

    async def connect(self):
        await self.accept()
        await self.send_system_info()

    async def disconnect(self, close_code):
        pass

    async def receive(self, text_data=None, bytes_data=None):
        pass

    async def send_system_info(self):
        while True:
            system_info = {
                "system": platform.system(),
                "release": platform.release(),
                "cpu_usage": psutil.cpu_percent(),
                "memory_usage": psutil.virtual_memory().percent,
                "network": {
                    "bytes_sent": psutil.net_io_counters().bytes_sent,
                    "bytes_received": psutil.net_io_counters().bytes_recv,
                },
                "load_average": psutil.getloadavg(),
            }

            await self.send(json.dumps(system_info))
            await asyncio.sleep(5) # 5秒更新一次

前端代码

代码语言:javascript
复制
<!-- dashboard/components/WebsocketMetrics.vue -->
<template>
    <div>
        <el-row style="margin-bottom: 5px;">
            <el-col>
                <el-card>
                    <Sunny style="width: 1em; height: 1em; margin-right: 8px" />
                    <span>
                        系统: {{ system }} {{ release }} CPU: {{ cpuUsage }}% 内存: {{ memoryUsage }}% 负载: {{
                            loadAverageMiddleValue }}
                    </span>
                </el-card>
            </el-col>
        </el-row>

       
    </div>
</template>

<script>


export default {
    data () {
        return {
            system: '',
            release: '',
            cpuUsage: 0,
            memoryUsage: 0,
            bytesSent: 0,
            bytesReceived: 0,
            loadAverage: [],
            websocket: null,
        };
    },
    created () {
        this.initWebSocket();
    },
    beforeUnmount () {
        if (this.websocket) {
            this.websocket.close();
        }
    },
    computed: {
        loadAverageMiddleValue () {
            const middleIndex = Math.floor(this.loadAverage.length / 2);
            return this.loadAverage[middleIndex];
        },
    },
    methods: {
        initWebSocket () {
            const protocol = location.protocol === "https:" ? "wss://" : "ws://";
            let BASE_WS_URL = "";
            if (process.env.VUE_APP_BASE_API.startsWith("http")) {
                BASE_WS_URL = process.env.VUE_APP_BASE_API.split("/")[2];
                console.log("VUE_APP_BASE_API:", BASE_WS_URL);
            } else {
                BASE_WS_URL = location.href.split("/")[2];
                console.log("WEB_DOMAIN_NAME:", BASE_WS_URL);
            }
            const socketURL = protocol + BASE_WS_URL + "/ws/systeminfo/"
            // const socketURL = 'ws://test-ezops.enterxai.com/ws/systeminfo/';
            this.websocket = new WebSocket(socketURL);
            this.websocket.onopen = this.websocketOnOpen;
            this.websocket.onmessage = this.websocketOnMessage;
            this.websocket.onclose = this.websocketOnClose;
            this.websocket.onerror = this.websocketOnError;
        },
        websocketOnOpen () {
            console.log('WebSocket connection opened');
        },
        websocketOnMessage (event) {
            const data = JSON.parse(event.data);
            this.system = data.system;
            this.release = data.release;
            this.cpuUsage = data.cpu_usage;
            this.memoryUsage = data.memory_usage;

            this.bytesSent = Array.isArray(data.network.bytes_sent) ? data.network.bytes_sent : [data.network.bytes_sent];
            this.bytesReceived = Array.isArray(data.network.bytes_received) ? data.network.bytes_received : [data.network.bytes_received];            
            // this.bytesSent = data.network.bytes_sent;
            // this.bytesReceived = data.network.bytes_received;
            this.loadAverage = data.load_average;

           
        },
        websocketOnClose () {
            console.log('WebSocket connection closed');
        },
        websocketOnError (error) {
            console.error('WebSocket error:', error);
        },
   


    },
};
</script>


<!-- dashboard/index.vue -->

<template>
    <div>
        <WebsocketMetrics />
    </div>
</template>

<script>
import WebsocketMetrics from './components/WebsocketMetrics';
import * as echarts from 'echarts';

export default {
    name: 'Dashboard',
    components: {
        WebsocketMetrics
    },
    
  ......

websocket 测试

Django websocket 自动推送_django开发
Django websocket 自动推送_django开发

http://www.jsons.cn/websocket/

Django websocket 自动推送_django开发_02
Django websocket 自动推送_django开发_02
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 后端代码
  • 前端代码
  • websocket 测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档