后端代码

#!/usr/bin/env python# WS server that sends messages at random intervalsimport asyncio
import websockets
import time
import random
import json
from datetime import datetimeasync def my_test(websocket, path):while True:camera_ip = '10.192.49.1'server_ip = '10.193.33.139'server_port = '8000'a = random.randint(1000, 10000)b = random.randint(10, 200)c = random.randint(20, 40)numlist = [a, b, int(a/b), c]worklist = []for i in range(10):id = itime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")count = random.randint(20, 40)path = "./html/results/test.jpg"worklist.append([id, time, count, path])daycount = random.randint(30, 200)nightcount = random.randint(30, 200)dayratio = int((daycount / (daycount + nightcount)) * 100)nightratio = 100 - dayratiodaynight = [[dayratio, daycount], [nightratio, nightcount]]real_time_img = "static/results/test11.jpg"recognize_result_img = "static/results/test22.jpg"save_origine_img = "static/results/test33.jpg"return_dict = dict(server_ip=server_ip,server_port=server_port,camera_ip = camera_ip,numlist=numlist,worklist=worklist,real_time_img=real_time_img,recognize_result_img=recognize_result_img,save_origine_img=save_origine_img,daynight = daynight)return_dict = json.dumps(return_dict)await websocket.send(return_dict)await asyncio.sleep(1)async def main():async with websockets.serve(my_test, "10.193.33.139", 1234):await asyncio.Future()asyncio.get_event_loop().run_until_complete(main())

前端代码:

 <script type="text/javascript">var websocket = new WebSocket("ws://10.193.33.139:1234");//连接成功建立的回调方法// websocket.onopen = function () {//     window.alert('连接成功')// };// 前端接收后端传来的消息websocket.onmessage = function(event) {var infodic = JSON.parse(event.data);document.getElementById('server_IP').innerText = "服务器IP: " + infodic.server_ip;document.getElementById('server_port').innerText = "服务器端口:" + infodic.server_port;document.getElementById('camera_IP').innerText = "摄像头IP:" + infodic.camera_ip;// 设置数字document.getElementById('num1').innerText = infodic.numlist[0];document.getElementById('num2').innerText = infodic.numlist[1];document.getElementById('num3').innerText = infodic.numlist[2];document.getElementById('num4').innerText = infodic.numlist[3];// 设置图片document.getElementById('real_time_img').setAttribute("src", infodic.real_time_img) document.getElementById('real_time_img_light').setAttribute("src", infodic.real_time_img) document.getElementById('recognize_result_img').setAttribute("src", infodic.recognize_result_img) document.getElementById('recognize_result_img_light').setAttribute("src", infodic.recognize_result_img) document.getElementById('save_origine_img').setAttribute("src", infodic.save_origine_img) document.getElementById('save_origine_img_light').setAttribute("src", infodic.save_origine_img)// 设置表格for (var i = 0; i < 9; i++) {document.getElementById('work_id_' + (i + 1)).innerText = infodic.worklist[i][0];document.getElementById('work_time_' + (i + 1)).innerText = infodic.worklist[i][1];document.getElementById('work_count_' + (i + 1)).innerText = infodic.worklist[i][2];document.getElementById('work_save_' + (i + 1)).innerText = infodic.worklist[i][3];}// 设置扇形图jQuery(document).ready(function($) {var donut_chart_demo = $("#donut-chart-demo");donut_chart_demo.empty() donut_chart_demo.parent().show();var donut_chart = Morris.Donut({element: 'donut-chart-demo',data: [{label: "白天纸浆总量(" + infodic.daynight[0][0] + "%)",value: infodic.daynight[0][1]},{label: "夜晚纸浆总量(" + infodic.daynight[1][0] + "%)",value: infodic.daynight[1][1]}],colors: ['#707f9b', '#242d3c']});donut_chart_demo.parent().attr('style', '');});};//连接关闭的回调方法websocket.onclose = function() {websocket.close();// window.alert('连接已断开或未连接')};//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。window.onbeforeunload = function() {websocket.close();};//关闭连接function closeWebSocket() {websocket.close();// window.clearInterval(intervalId);}
</script>

集成到Django的manage.py 文件时,后端代码:

#!/usr/bin/env python# WS server that sends messages at random intervalsimport asyncio
import websockets
import random
import json
import threading
from datetime import datetimeasync def runner(websocket, path):while True:camera_ip = '10.192.49.1'server_ip = '10.193.33.139'server_port = '8000'a = random.randint(1000, 10000)b = random.randint(10, 200)c = random.randint(20, 40)numlist = [a, b, int(a/b), c]worklist = []for i in range(10):id = itime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")count = random.randint(20, 40)path = "./html/results/test.jpg"worklist.append([id, time, count, path])daycount = random.randint(30, 200)nightcount = random.randint(30, 200)dayratio = int((daycount / (daycount + nightcount)) * 100)nightratio = 100 - dayratiodaynight = [[dayratio, daycount], [nightratio, nightcount]]real_time_img = "static/results/test11.jpg"recognize_result_img = "static/results/test22.jpg"save_origine_img = "static/results/test33.jpg"return_dict = dict(server_ip=server_ip,server_port=server_port,camera_ip = camera_ip,numlist=numlist,worklist=worklist,real_time_img=real_time_img,recognize_result_img=recognize_result_img,save_origine_img=save_origine_img,daynight = daynight)return_dict = json.dumps(return_dict)await websocket.send(return_dict)await asyncio.sleep(1)async def main():async with websockets.serve(runner, "10.193.33.139", 1234):await asyncio.Future()class MyThread (threading.Thread):def __init__(self, threadID, name):threading.Thread.__init__(self)self.threadID = threadIDself.name = namedef run(self):print("开始线程:" + self.name)# loop = asyncio.get_event_loop().run_until_complete(main())# asyncio.set_event_loop(loop)asyncio.set_event_loop(asyncio.new_event_loop())loop = asyncio.get_event_loop()loop.run_until_complete(main())print("退出线程:" + self.name)def myApplication():thread = MyThread(1, "Thread-1")thread.start()

当出现以下错误时:

RuntimeError: There is no current event loop in thread 'Thread-1'.

在调用协程语句前加入下述语句即可解决:

asyncio.set_event_loop(asyncio.new_event_loop())

参考:Tornado5 执行线程时报错:RuntimeError: There is no current event loop in thread 'Thread-1'._jusang486的专栏-CSDN博客https://blog.csdn.net/jusang486/article/details/82382358 (1条消息) python协程系列(六)——asyncio的EventLoop以及Future详解_MIss-Y的博客-CSDN博客https://blog.csdn.net/qq_27825451/article/details/86292513

使用websockets,后台实时发数据,前台实时接受数据,并集成到Django相关推荐

  1. java控制一次传10条数据_java 定时同步数据的任务优化

    前言 定时任务在系统中并不少见,主要目的是用于需要定时处理数据或者执行某个操作的情况下,如定时关闭订单,或者定时备份.而常见的定时任务分为2种,第一种:固定时间执行,如:每分钟执行一次,每天执行一次. ...

  2. 实时监控后台数据 vue_实时数据监控,快速掌握B站爆款视频热度走向

    飞瓜数据B站版的数据监控功能提供对B站UP主监控功能,实时掌握UP主视频热度走向和投放效果. 通过监控输入B站视频链接,设定24/48时长开始对其监控.监控开始后在监控报告中查看对应视频的数据曲线变化 ...

  3. html前台数据自动更新,网页数据如何实现实时刷新?

    本文仅为学技术而简单举例,后端框架是Django,具体业务逻辑是否合理可以不用管,下方是工作中需要实现的需求 自动化程序脚本运行的三种任务状态: 1.未执行  2.执行成功  3.执行失败 任务状态在 ...

  4. 后台数据到mysql怎样保持实时更新_MySQL是如何保证数据的完整性

    数据的一致性和完整性对于在线业务的重要性不言而喻,如何保证数据不丢呢?今天我们就探讨下关于数据的完整性和强一致性,MySQL做了哪些改进. 一. MySQL的二阶段提交 在Oracle和MySQL这种 ...

  5. python同花顺股票实时数据_web实时股票数据展示

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 所有这些都是实时发生的,并推送到仪表板供用户评估事物和行为. 最终,为了能够从任 ...

  6. 广告效果数据的实时计算与分析(Druid)(一)

    我是做SSP-供应方平台服务的,工作中除了负责SSP 管理后台的需求开发(如,媒体应用和位置的管理.流量分配.效果数据的报表展示.SDK性能分析等)之外,最主要的是负责SSP广告效果数据的实时统计与分 ...

  7. 通过rsync+inotify实现数据的实时备份

    在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar ...

  8. Android Camera设置setPreviewCallback实现onPreviewFrame接口实时截取每一帧视频流数据

    1 概述 通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据 2 知识点 ① Android Camera ...

  9. 利用Flume将MySQL表数据准实时抽取到HDFS

    转自:http://blog.csdn.net/wzy0623/article/details/73650053 一.为什么要用到Flume 在以前搭建HAWQ数据仓库实验环境时,我使用Sqoop抽取 ...

最新文章

  1. 产品经理在跨部门沟通中常见问题和解决办法[转自UCDChina]
  2. window.btoa
  3. C# 线程的定义和使用
  4. 《软件测试》第五次作业
  5. 栅格单元值的选取方法_ArcGIS中栅格数据重采样方法
  6. OpenCV-数字图像处理之拉普拉斯算子
  7. javascript精雕细琢(三):作用域与作用域链
  8. position的用法小结
  9. 剑指offer——面试题57:删除链表中重复的结点
  10. 【爱你 祖国】细看我国智能无人机如何从无到有?都是被逼出来的!
  11. 用JMS578转接板开卡PS3111主控pSLC模式,带固件下载
  12. 2014年3月份全国计算机等级考试二级c语言选择题大全,2014年3月全国计算机二级C选择题考试真题...
  13. Python注释之TODO注释
  14. 计算机网络原理 谢希仁(第8版)第三章习题答案
  15. 这些电脑小技巧可以让你在朋友圈很时髦!
  16. 网上书店平台---设计活动
  17. 最小生成树--牛客练习赛43-C
  18. 英雄联盟轮播图自动轮播
  19. quote函数什么意思,怎么用
  20. Windows认证 | 网络认证

热门文章

  1. 6、Power View—条形图的应用
  2. c语言NULL和0区别
  3. BAPI_PO_CREATE1
  4. SAP PP生产订单相关信息的获取
  5. ABAP类的继承、多态、重载
  6. 这届不敢看体检报告的年轻人还能“年轻”多久?
  7. 深圳“拍了拍”长沙:美食巨头文和友、茶颜、徐记海鲜正在“排队”签收
  8. 苏宁的另类“存在感”
  9. pthread异步_探索 Flutter 异步消息的实现
  10. 与虫子尾交3d动画网站_不容错过的三维动画设计展!快来pick吧!