当前位置:首页 > Web开发 > 正文

Flask websocker

2024-03-31 Web开发

pip?install?gevent-websocket??

?

视图

#?-*-?coding:?utf-8?-*-??

import?json??

from?flask?import?Flask,?request,?render_template??

from?geventwebsocket.handler?import?WebSocketHandler??#?导入websocker的方法??

from?gevent.pywsgi?import?WSGIServer??

?? ?

app?=?Flask(__name__)??

?? ?

user_socker_list?=?[]??#?保存所有的websocker对象??

?? ?

@app.route(‘/ws‘)??

def?ws():??

????#?print(request.headers)??

????user_socker?=?request.environ.get(‘wsgi.websocket‘)??#?type??WebSocket??

?? ?

????"""??

????readyState:?3??连接正常,然后断开??

????readyState:?1??表示正常连接??

????"""??

????if?user_socker:??

????????user_socker_list.append(user_socker)??

????????while?1:??

????????????msg?=?user_socker.receive()??#?接收消息??

????????????print(msg)??#?接受完信息后断开,所有加循环变成长连接??

????????????for?u_socker?in?user_socker_list:??

????????????????if?u_socker?==?user_socker:??

????????????????????continue??

????????????????try:??

????????????????????u_socker.send(msg)??

????????????????except:??

????????????????????continue??

?? ?

????return?render_template(‘ws.html‘)??

?? ?

?? ?

if?__name__?==?‘__main__‘:??

????#?app.run(host=‘0.0.0.‘,?debug=True)??

????http_serv?=?WSGIServer((‘0.0.0.0‘,?5000),?app,?handler_class=WebSocketHandler)??

????http_serv.serve_forever()??

?

前端

<!DOCTYPE?html>??

<html?lang="en">??

<head>??

????<meta?charset="UTF-8">??

????<title>ws</title>??

</head>??

<body>??

<input?type="text"?id="msg">?<button?onclick="snd_msm()">发送</button>??

?? ?

<div?id="chat_list"?style="width:?500px;?height:?500px;">??

?? ?

</div>??

?? ?

</body>??

?? ?

<script?type="application/javascript">??

????var?ws?=?new?WebSocket(‘ws://192.168.32.71:5000/ws‘);??{#?设置websocker连接?#}??

????ws.onmessage?=?function?(data)?{??

????????console.log(data.data);??{#?数据在datadata里面?#}??

????????var?ptag?=?document.createElement(‘p‘);??

????????ptag.innerText?=?data.data;??

????????document.getElementById(‘chat_list‘).appendChild(ptag)??

?? ?

????};?{#?打印收到的数据?#}??

?????? ?

????function?snd_msm()?{??

????????var?msg?=?document.getElementById(‘msg‘).value;??

????????ws.send(msg)??

????}??

</script>??

</html>??

?

一对一单机版

视图

#?-*-?coding:?utf-8?-*-??

import?json??

from?flask?import?Flask,?request,?render_template??

from?geventwebsocket.handler?import?WebSocketHandler??#?导入websocker的方法??

from?gevent.pywsgi?import?WSGIServer??

?? ?

app?=?Flask(__name__)??

?? ?

user_socker_dict?=?{}??#?这里仿照flask上下文的方式??

?? ?

"""??

借用??

flask?上下文??

?? ?

{??

"线程id":?偏函数,??

"线程id":?偏函数,??

}??

"""??

?? ?

@app.route(‘/ws2/<usename>‘)??

def?ws2(usename):??

????#?print(request.headers)??

????user_socker?=?request.environ.get(‘wsgi.websocket‘)??#?type??WebSocket??

?? ?

????"""??

????readyState:?3??连接正常,然后断开??

????readyState:?1??表示正常连接??

????"""??

????print(user_socker)??

????if?user_socker:??

????????user_socker_dict[usename]?=?user_socker??

????????print(user_socker_dict)??

????????while?1:??

????????????msg?=?user_socker.receive()??#?接收人,消息,发送人??

????????????msg_dict?=?json.loads(msg)??

????????????msg_dict[‘from_user‘]?=?usename??

????????????to_user?=?msg_dict.get(‘to_user‘)??

????????????u_socker?=?user_socker_dict.get(to_user)??#?type??WebSocket??

????????????u_socker.send(json.dumps(msg_dict))??

?? ?

????return?render_template(‘ws2.html‘)??

?? ?

?? ?

if?__name__?==?‘__main__‘:??

????#?app.run(host=‘0.0.0.‘,?debug=True)??

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/40934.html