django中websocket的具体使用


Posted in Python onJanuary 22, 2022

websocket是一种持久化的协议,HTTP协议是一种无状态的协议,在特定场合我们需要使用长连接,做数据的实时更新,这种情况下我们就可以使用websocket做持久连接。http与websocket二者存在交集。

后端:

from dwebsocket.decorators import accept_websocket
import json
# 存储连接websocket的用户
clist = []
 
@accept_websocket
def websocketLink(request):
    # 获取连接
    if request.is_websocket:
        # 新增 用户  连接信息
        clist.append(request.websocket)
        # 监听接收客户端发送的消息 或者 客户端断开连接
        for message in request.websocket:
            break
 
 # 发送消息
def websocketMsg(client, msg):
    b1 = json.dumps(msg,ensure_ascii=False).encode('utf-8')
    client.send(b1)
 
# 服务端发送消息
def sendmsg():
    sql = "select * from customer"
    res = db1.find_all(sql)
    if len(clist)>0:
        for i in clist:
            i.send(json.dumps({'list': res},ensure_ascii=False).encode('utf-8'))
             # websocketMsg(i, {'list': res})
    return HttpResponse("ok")
 
from apscheduler.schedulers.blocking import BlockingScheduler
 
def getecharts(request):
    scheduler = BlockingScheduler()
    scheduler.add_job(sendmsg,'interval',seconds=1)
    scheduler.start()
    return HttpResponse('ok')

前端:

<template>
  <div class="bgpic">
    <van-row style="padding-top: 10px;padding-bottom: 10px">
      <van-col span="8">
        <div id="weekmain" style="width: 400px;height: 300px"></div>
      </van-col>
      <van-col span="8">http://api.map.baidu.com/marker </van-col>
      <van-col span="8">
        <div id="monthmain" style="width: 400px;height: 300px"></div>
      </van-col>
    </van-row>
    <van-row>
      <van-col span="8"></van-col>
      <van-col span="8"></van-col>
      <van-col span="8">{{infolist1}}</van-col>
    </van-row>
  </div>
</template>
 
<script>
import * as echarts from 'echarts';
// import myaxios from "../../../https/myaxios";
import axios from 'axios';
import {reactive} from 'vue';
export default {
  name: "myweek",
  setup(){
    let infolist1 = reactive({"data":[]})
    // let mydata = reactive([])
    const initdata=()=>{
      var socket = new WebSocket("ws:127.0.0.1:8000/websocketLink");
 
      socket.onopen = function () {
        console.log('连接成功');//成功连接上Websocket
      };
      socket.onmessage = function (e) {
        // alert('消息提醒: ' + e.data);
        //打印服务端返回的数据
        infolist1.data = e.data
        console.log(e.data)
        // mydata = infolist1.list
        // console.log(mydata)
      };
      socket.onclose=function(e){
        console.log(e);
        socket.close(); //关闭TCP连接
      };
    }
    return{
      infolist1,
      initdata
    }
  },
  data(){
    return{
      infolist:[],
    }
  },
  methods:{
    mget(){
      axios.get("http://127.0.0.1:8000/getecharts").then(res=>{
        console.log(res)
      })
    },
    infoshow(){
      axios.get("http://localhost:8000/infoshow","get").then(res=>{
        this.infolist=res.data.list
        this.getmonth()
        this.mget()
      })
    },
    getmonth(){
      var chartDom = document.getElementById('monthmain');
      var myChart = echarts.init(chartDom);
      var option;
 
// prettier-ignore
 
      let dataAxis = [];
// prettier-ignore
      let data = [];
 
      for(let i=0;i<this.infolist.length;i++){
        dataAxis.push(this.infolist[i]["name"])
        data.push(this.infolist[i]["tmoney"])
      }
 
      let yMax = 10000;
      let dataShadow = [];
      for (let i = 0; i < data.length; i++) {
        dataShadow.push(yMax);
      }
      option = {
        title: {
          text: '特性示例:渐变色 阴影 点击缩放',
          subtext: 'Feature Sample: Gradient Color, Shadow, Click Zoom'
        },
        xAxis: {
          data: dataAxis,
          axisLabel: {
            inside: true,
            color: '#fff'
          },
          axisTick: {
            show: false
          },
          axisLine: {
            show: false
          },
          z: 10
        },
        yAxis: {
          axisLine: {
            show: false
          },
          axisTick: {
            show: false
          },
          axisLabel: {
            color: '#999'
          }
        },
        dataZoom: [
          {
            type: 'inside'
          }
        ],
        series: [
          {
            type: 'bar',
            showBackground: true,
            itemStyle: {
              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                { offset: 0, color: '#83bff6' },
                { offset: 0.5, color: '#188df0' },
                { offset: 1, color: '#188df0' }
              ])
            },
            emphasis: {
              itemStyle: {
                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                  { offset: 0, color: '#2378f7' },
                  { offset: 0.7, color: '#2378f7' },
                  { offset: 1, color: '#83bff6' }
                ])
              }
            },
            data: data
          }
        ]
      };
// Enable data zoom when user click bar.
      const zoomSize = 6;
      myChart.on('click', function (params) {
        console.log(dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]);
        myChart.dispatchAction({
          type: 'dataZoom',
          startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],
          endValue:
              dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)]
        });
      });
 
      option && myChart.setOption(option);
    },
    getweek(){
      var chartDom = document.getElementById('weekmain');
      var myChart = echarts.init(chartDom);
      var option;
 
      option = {
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'shadow'
          }
        },
        legend: {},
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true
        },
        xAxis: [
          {
            type: 'category',
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
          }
        ],
        yAxis: [
          {
            type: 'value'
          }
        ],
        series: [
          {
            name: 'Direct',
            type: 'bar',
            emphasis: {
              focus: 'series'
            },
            data: [320, 332, 301, 334, 390, 330, 320]
          },
          {
            name: 'Email',
            type: 'bar',
            stack: 'Ad',
            emphasis: {
              focus: 'series'
            },
            data: [120, 132, 101, 134, 90, 230, 210]
          },
          {
            name: 'Union Ads',
            type: 'bar',
            stack: 'Ad',
            emphasis: {
              focus: 'series'
            },
            data: [220, 182, 191, 234, 290, 330, 310]
          },
          {
            name: 'Video Ads',
            type: 'bar',
            stack: 'Ad',
            emphasis: {
              focus: 'series'
            },
            data: [150, 232, 201, 154, 190, 330, 410]
          },
          {
            name: 'Search Engine',
            type: 'bar',
            data: [862, 1018, 964, 1026, 1679, 1600, 1570],
            emphasis: {
              focus: 'series'
            },
            markLine: {
              lineStyle: {
                type: 'dashed'
              },
              data: [[{ type: 'min' }, { type: 'max' }]]
            }
          },
          {
            name: 'Baidu',
            type: 'bar',
            barWidth: 5,
            stack: 'Search Engine',
            emphasis: {
              focus: 'series'
            },
            data: [620, 732, 701, 734, 1090, 1130, 1120]
          },
          {
            name: 'Google',
            type: 'bar',
            stack: 'Search Engine',
            emphasis: {
              focus: 'series'
            },
            data: [120, 132, 101, 134, 290, 230, 220]
          },
          {
            name: 'Bing',
            type: 'bar',
            stack: 'Search Engine',
            emphasis: {
              focus: 'series'
            },
            data: [60, 72, 71, 74, 190, 130, 110]
          },
          {
            name: 'Others',
            type: 'bar',
            stack: 'Search Engine',
            emphasis: {
              focus: 'series'
            },
            data: [62, 82, 91, 84, 109, 110, 120]
          }
        ]
      };
 
      option && myChart.setOption(option);
 
    },
  },
  mounted() {
    this.infoshow()
    this.getweek()
    this.initdata()
  }
}
</script>
 
<style scoped>
.bgpic{
  background-image: url("../../../https/4.jpg");
  width: 1269px;
  height: 781px;
}
</style>

到此这篇关于django中websocket的具体使用的文章就介绍到这了,更多相关django websocket内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
Oct 15 Python
Python中eval带来的潜在风险代码分析
Dec 11 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
Aug 01 Python
Python如何实现强制数据类型转换
Nov 22 Python
python如何使用Redis构建分布式锁
Jan 16 Python
Django中从mysql数据库中获取数据传到echarts方式
Apr 07 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
使用python将微信image下.dat文件解密为.png的方法
Nov 30 Python
python实现三种随机请求头方式
Jan 05 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 #Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 22 #Python
Pandas搭配lambda组合使用详解
Jan 22 #Python
Python中的tkinter库简单案例详解
Jan 22 #Python
解析python中的jsonpath 提取器
Jan 18 #Python
Python中如何处理常见报错
Jan 18 #Python
Python机器学习应用之工业蒸汽数据分析篇详解
You might like
聊天室php&amp;mysql(三)
2006/10/09 PHP
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
php输出xml属性的方法
2015/03/19 PHP
php生成动态验证码gif图片
2015/10/19 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
php实现生成验证码实例分享
2016/04/10 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
DOM 中的事件处理介绍
2012/01/18 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
python3去掉string中的标点符号方法
2019/01/22 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
保护动物的标语
2014/06/11 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
丧事主持词
2015/07/02 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python