单聊代码
import jsonfrom flask import Flask,request,render_templatefrom geventwebsocket.handler import WebSocketHandlerfrom gevent.pywsgi import WSGIServerfrom geventwebsocket.websocket import WebSocketapp = Flask(__name__)user_socket_dict = {}@app.route("/conn_ws/<user_nick>")def ws_app(user_nick): ???# print(request.environ) ???""" ???{‘GATEWAY_INTERFACE‘: ‘CGI/1.1‘, ‘SERVER_SOFTWARE‘: ‘gevent/1.4 Python/3.6‘, ‘SCRIPT_NAME‘: ‘‘, ‘wsgi.version‘: (1, 0), ‘wsgi.multithread‘: False, ‘wsgi.multiprocess‘: False, ‘wsgi.run_once‘: False, ‘wsgi.url_scheme‘: ‘http‘, ‘wsgi.errors‘: <_io.TextIOWrapper name=‘<stderr>‘ mode=‘w‘ encoding=‘UTF-8‘>, ‘SERVER_NAME‘: ‘PC-20180312LANS‘, ‘SERVER_PORT‘: ‘9527‘, ‘REQUEST_METHOD‘: ‘GET‘, ‘PATH_INFO‘: ‘/conn_ws‘, ‘QUERY_STRING‘: ‘‘, ‘SERVER_PROTOCOL‘: ‘HTTP/1.1‘, ‘REMOTE_ADDR‘: ‘192.168.11.133‘, ‘REMOTE_PORT‘: ‘53449‘, ‘HTTP_HOST‘: ‘192.168.11.133:9527‘, ‘HTTP_CONNECTION‘: ‘keep-alive‘, ‘HTTP_UPGRADE_INSECURE_REQUESTS‘: ‘1‘, ‘HTTP_USER_AGENT‘: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘, ‘HTTP_ACCEPT‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8‘, ‘HTTP_ACCEPT_ENCODING‘: ‘gzip, deflate‘, ‘HTTP_ACCEPT_LANGUAGE‘: ‘zh,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7‘, ‘wsgi.input‘: <gevent.pywsgi.Input object at 0x0000000003B36C48>, ‘wsgi.input_terminated‘: True, ‘werkzeug.request‘: <Request ‘http://192.168.11.133:9527/conn_ws‘ [GET]>} ???{‘GATEWAY_INTERFACE‘: ‘CGI/1.1‘, ‘SERVER_SOFTWARE‘: ‘gevent/1.4 Python/3.6‘, ‘SCRIPT_NAME‘: ‘‘, ‘wsgi.version‘: (1, 0), ‘wsgi.multithread‘: False, ‘wsgi.multiprocess‘: False, ‘wsgi.run_once‘: False, ‘wsgi.url_scheme‘: ‘http‘, ‘wsgi.errors‘: <_io.TextIOWrapper name=‘<stderr>‘ mode=‘w‘ encoding=‘UTF-8‘>, ‘SERVER_NAME‘: ‘PC-20180312LANS‘, ‘SERVER_PORT‘: ‘9527‘, ‘REQUEST_METHOD‘: ‘GET‘, ‘PATH_INFO‘: ‘/conn_ws‘, ‘QUERY_STRING‘: ‘‘, ‘SERVER_PROTOCOL‘: ‘HTTP/1.1‘, ‘REMOTE_ADDR‘: ‘127.0.0.1‘, ‘REMOTE_PORT‘: ‘53571‘, ‘HTTP_HOST‘: ‘127.0.0.1:9527‘, ‘HTTP_CONNECTION‘: ‘Upgrade‘, ‘HTTP_PRAGMA‘: ‘no-cache‘, ‘HTTP_CACHE_CONTROL‘: ‘no-cache‘, ‘HTTP_UPGRADE‘: ‘websocket‘, ‘HTTP_ORIGIN‘: ‘http://localhost:63342‘, ‘HTTP_SEC_WEBSOCKET_VERSION‘: ‘13‘, ‘HTTP_USER_AGENT‘: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘, ‘HTTP_ACCEPT_ENCODING‘: ‘gzip, deflate, br‘, ‘HTTP_ACCEPT_LANGUAGE‘: ‘zh,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7‘, ‘HTTP_SEC_WEBSOCKET_KEY‘: ‘ET/SDQc1sI+uhxm+EjHLcw==‘, ‘HTTP_SEC_WEBSOCKET_EXTENSIONS‘: ‘permessage-deflate; client_max_window_bits‘, ‘wsgi.input‘: <gevent.pywsgi.Input object at 0x0000000003BC9468>, ‘wsgi.input_terminated‘: True, ‘wsgi.websocket_version‘: ‘13‘, ???‘wsgi.websocket‘: <geventwebsocket.websocket.WebSocket object at 0x0000000003BC8528>, ???‘werkzeug.request‘: <Request ‘http://127.0.0.1:9527/conn_ws‘ [GET]>} ???""" ???user_socket = request.environ.get("wsgi.websocket") ?# type:WebSocket ???user_socket_dict[user_nick] = user_socket ???print(len(user_socket_dict),list(user_socket_dict.keys())) ???while True: ???????msg = user_socket.receive() ???????# {from_user:"alexDSB",to_user:"YWB",message:"666"} ???????msg_dict = json.loads(msg) ???????to_user = msg_dict.get("to_user") ???????to_user_socket = user_socket_dict.get(to_user) ???????to_user_socket.send(msg) ???????# ???????# for usocket in ?user_socket_list: ???????# ????usocket.send(msg) ???????# user_socket.send(msg) ???# 1 已经开启的websocket连接 ???# 3 开启了websocket连接 然后 断开了 ???# return "666"@app.route("/")def index(): ???return render_template("my_ws.html")if __name__ == ‘__main__‘: ???# app.run() ???http_serv = WSGIServer(("0.0.0.0",9527),app,handler_class=WebSocketHandler) ???http_serv.serve_forever()
<!DOCTYPE html><html lang="en"><head> ???<meta charset="UTF-8"> ???<title>Title</title></head><body><p><input type="text" id="nick"><button onclick="login()">登陆聊天室</button></p>发送给:<input type="text" id="to_user">消息:<input type="text" id="send_str"><button id="send_btn" onclick="send()">发送消息</button><p><div id="chat_list"></div></p></body><script type="application/javascript"> ???var ws = null; ???// ws.onopen = function(){ ???// ????ws.send("123"); ???// } ???function login() { ???????var nick = document.getElementById("nick").value; ???????ws = new WebSocket("ws://192.168.11.78:9527/conn_ws/"+nick); ???????ws.onmessage = function (messageEvent) { ???????????console.log(messageEvent.data); ???????????var ptag = document.createElement("p"); ???????????var message = JSON.parse(messageEvent.data); ???????????ptag.innerText =message.from_user + " : " + message.message ; ???????????document.getElementById("chat_list").appendChild(ptag); ???????}; ???} ???// document.getElementById("send_btn").addEventListener("onclick",) ???function send() { ???????var message = document.getElementById("send_str").value; ???????var send_str = { ???????????from_user:document.getElementById("nick").value, ???????????to_user:document.getElementById("to_user").value, ???????????message:message ???????}; ???????var json_send_str = JSON.stringify(send_str); ???????ws.send(json_send_str); ???}</script></html>
写代码时要注意仔细!!仔细!!
Websocket ??单聊功能
原文地址:https://www.cnblogs.com/tianshuai1/p/10588195.html