博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在flask中使用websocket-实时消息推送
阅读量:5276 次
发布时间:2019-06-14

本文共 2515 字,大约阅读时间需要 8 分钟。

- flask默认使用wsgi支持http协议,如需使用websocket需要安装gevent-websocket模块,http,websocket协议都可以支持

  Django应用:channel

  Tornado应用:自己有

 pip3 install gevent-websocket

app.py

from flask import Flask,request,render_template,redirect,sessionimport uuidfrom geventwebsocket.handler import WebSocketHandlerfrom gevent.pywsgi import WSGIServerimport jsonapp = Flask(__name__)app.secret_key = ';lkjnfdidiclsjek'GENTIEMAN = {    '1':{
'name':'钢弹','count':0}, '2':{
'name':'铁锤','count':0}, '3':{
'name':'闫帅','count':0},}WEBSOCKET_DICT = {}@app.before_requestdef before_reuqest(): if request.path == '/login': return None user_info = session.get('user_info') if user_info: return None return redirect('login')@app.route('/login',methods=['GET','POST'])def login(): if request.method == 'GET': return render_template('login.html') else: uid = str(uuid.uuid4()) session['user_info'] = {
'id':uid,'name':request.form.get('user')} return redirect('/index')@app.route('/index')def index(): return render_template('index.html',users=GENTIEMAN)@app.route('/message')def message(): # 1. 判断是否为Websocket请求,http不包含wsgi.websocket ws = request.environ.get('wsgi.websocket') if not ws: return 'use websocket' # 此处连接成功 current_user_id = session['user_info']['id'] WEBSOCKET_DICT[current_user_id] = ws while True: # 2. 等待用户发送消息,并接受 message = ws.receive() # 投票对应的ID # 关闭 mesaage = None if not message: del WEBSOCKET_DICT[current_user_id] break # 3. 获取用户要投票的ID,并+1 old = GENTIEMAN[message]['count'] new = old + 1 GENTIEMAN[message]['count'] = new data = {
'user_id':message,'count':new,'type':'vote'} # 给所有客户端推送消息 for conn in WEBSOCKET_DICT.values(): conn.send(json.dumps(data)) return '完毕'@app.route('/notify')def notify(): data = {
'data':'订单生成','type':'alert'} for conn in WEBSOCKET_DICT.values(): conn.send(json.dumps(data)) return '完毕'if __name__ == '__main__': # 如果是http请求走app使用原有的wsgi处理,如果是websocket请求走WebSocketHandler处理 http_server = WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler) http_server.serve_forever()

index.html

    

投票系统:参与投票的人

    {
    % for k,v in users.items() %}
  • {
    {v.name}} {
    {v.count}}
  • {
    % endfor %}

 

login.html

 

转载于:https://www.cnblogs.com/sunlong88/p/9623707.html

你可能感兴趣的文章
帕秋莉·诺蕾姬 (Standard IO)
查看>>
网络游戏引擎简介
查看>>
串口调试助手-打开报错
查看>>
二维LIS(CDQ分治)
查看>>
自学ng2 -生命周期钩子
查看>>
什么是Git?
查看>>
Solaris 性能基础
查看>>
[ActiveMQ]初识ActiveMQ
查看>>
SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)
查看>>
【2017-02-18】C#基础 - 定义变量,输入输出(最基础的编程,以及灵活多变的编写思维)...
查看>>
ZJOI2012网络 题解报告【LCT】
查看>>
洛谷P3763 [Tjoi2017]DNA 【后缀数组】
查看>>
cuDNN version incompatibility: PyTorch was compiled against 7005 but linked against 6021 问题解决...
查看>>
mvc3分页封装
查看>>
创建查看修改数据库及数据表
查看>>
责任链设计模式(过滤器、拦截器)
查看>>
Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
查看>>
日期分析小明和小强都是张老师的学生,张老师的生日是M月N日
查看>>
Java 输出流中的flush方法
查看>>
观两个宇宙视频小感
查看>>