分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

flask websocket

发布时间:2023-09-06 02:29责任编辑:顾先生关键词:websocket

一.websocket

简介:

轮询:

玉帝不定的传达室 - 凌霄宝殿 - 一秒钟100次

开启高速公路(带宽) - 占用网络带宽

前后端一秒钟交互多次前后端压力极大并且带宽消耗资源浪费极其严重

长轮询:

玉帝在传达室 盖了几个宿舍 住着玉帝的小弟

让服务器保存我的一个连接状态,用于快速传递消息节省带宽释放压力数据实时性

长连接‘‘

websocket ???玉帝按电话了,并且把电话号码放在传达室了 ???服务端及客户端节省极大的资源 ???能保证数据实时性

使用

首先下载模块:

gevent-websocket

引用模块

from flask import Flask,render_template,requestfrom geventwebsocket.handler import WebSocketHandlerfrom geventwebsocket.websocket import WebSocketfrom gevent.pywsgi import WSGIServerimport json

流程就是

客户端通过登录链接那把""伞"",

在服务端创建一个字典user_socket_dict={},以用户名登录作为建存储许多把伞

客户端发送字典数据

"to_user":to_user,
"msg":msg

服务端通过

to_user = msg_dict.get("to_user")

存储

再有放在字典user_socket_dict={},通过登录用户名找到发送的那把伞

u_socket = user_socket_dict.get(to_user)

最后发送数据返回客户端

服务端.py

user_socket_dict={}@app.route("/ws/<username>")#同flask的路由,username是为了区分用户名def we(username): ???user_socket = request.environ.get(‘wsgi.websocket‘)#type:WebSocket ?#相当于连接的那把伞,成功连接后意味着可以进行通信了 ???##type:WebSocket :作用,使定义的user_socket拥有很多属性 ???if user_socket: ???????user_socket_dict[username]=user_socket#将用户登录时对信息存储,为了下次找到发送的对象 ???while 1: ???????msg = user_socket.receive()#通过"伞".receive()接收那个信息数据 ???????msg_dict = json.loads(msg) ???????msg_dict["from_user"]=username#返回客户端发送数据的用户名 ???????to_user = msg_dict.get("to_user") ???????u_socket = user_socket_dict.get(to_user) #type:WebSocket ?#找到要发送数据的的人 ???????# 通过"伞".receive()获取那个信息 找出send属性 ???????u_socket.send(json.dumps(msg_dict)) ?#通过后端发送给要发送的人,服务器模拟发送,u_socket就是那把伞 ???????#通过"伞".send发送数据@app.route("/")def index(): ???return render_template("ws.html")if __name__ == ‘__main__‘: ???????http_serv = WSGIServer((‘0.0.0.0‘, 9527), app, handler_class=WebSocketHandler)#找对象 ???????http_serv.serve_forever()#对象的属性

客户端.tml

<!DOCTYPE html><html lang="en"><head> ???<meta charset="UTF-8"> ???<title>Title</title></head><body><input type="text" id="username"><button onclick="login()">登录聊天室</button>给 <input type="text" id="">发送:<input type="text" id="msg"><button onclick="send_msg()">发送</button><div id="chat_list" style="width: 500px;height: 500px"></div></body><script type="application/javascript"> ???var ws = null; ???function login() { ???????var username = document.getElementById("username").value; ???????ws = new ?WebSocket("ws://192.168.72.1:9527/ws/"+username); ???????ws.onmessage=function (data) { ???????????{# ?通过ws 按个"伞".onmessage接收数据 data.data获取出传来的数据#} ???????????console.log(data.data) ???????????var recv_msg = JSON.parse(data.data); ???????????var ptag = document.createElement("p"); #定义一个标签p ???????????ptag.innerText=recv_msg.from_user + ":" + recv_msg.msg; ???????????document.getElementById("chat_list").appendChild(ptag); ???????} ???} ???function send_msg() { ???????{#获取发送者和数据信息#} ???????var to_user = document.getElementById("to_user").value; ???????var msg = document.getElementById("msg").value; ???????var send_str ={ ???????????"to_user":to_user, ???????????"msg":msg ???????}; ???????ws.send(JSON.stringify(send_str)); ???}</script></html>

flask websocket

原文地址:https://www.cnblogs.com/zhangqing979797/p/10251963.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved