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>
<va