初試
from flask import Flask, request from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer app = Flask(__name__)
@app.route('/')
def index():
user_socket = request.environ.get("wsgi.websocket") # type:WebSocket
try:
while True:
msg = user_socket.receive()
if msg == "quit":
return ''
print(msg)
user_socket.send(json.dumps({"msg": msg}))
except WebSocketError as e:
print(e)
return 'Finished'
if __name__ == '__main__':
http_server = WSGIServer(('0.0.0.0',5010), app, handler_class=WebSocketHandler)
http_server.serve_forever()
html部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <title>Title</title> </head> <body> <script type="text/javascript"> let ws = new WebSocket("ws://127.0.0.1:5010/"); ws.onmessage = function (data) { let msg = JSON.parse(data.data); console.log(msg) } </script> </body> </html>
結果
websocket群聊
from flask import Flask, request, render_template from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from geventwebsocket.exceptions import WebSocketErrorimport json app = Flask(__name__) user_socket_list = [] @app.route('/') def index(): return render_template('ws.html') @app.route('/chat') def chat(): user_socket = request.environ.get("wsgi.websocket") # type:WebSocket user_socket_list.append(user_socket) print(len(user_socket_list), user_socket_list) try: while True: msg = user_socket.receive() for socket in user_socket_list: if socket != user_socket_list: socket.send(json.dumps({"msg": msg})) # " 服務器信息: " + except WebSocketError as e: print(e) user_socket_list.remove(user_socket) return '' if __name__ == '__main__': http_server = WSGIServer(('192.168.56.1', 5000), app, handler_class=WebSocketHandler) http_server.serve_forever()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <title>Title</title> </head> <body> <div class="container"> <div><p>發送消息:<input type="text" id="msg"><button onclick="send_msg()">發送</button></p></div> <div id="chat" style="width: 500px; height: 500px"></div> </div> <script type="text/javascript"> let ws = new WebSocket("ws://192.168.56.1:5000/chat"); ws.onmessage = function (data) { let msg = JSON.parse(data.data); console.log(msg); let ptage = document.createElement("p"); ptage.innerText = msg.msg; document.getElementById("chat").appendChild(ptage); }; function send_msg() { let msg = document.getElementById("msg").value; console.log(msg); ws.send(msg); } </script> </body> </html>
websocket單聊
from flask import Flask, request, render_template from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from geventwebsocket.exceptions import WebSocketError import json app = Flask(__name__) user_socket_dic = {} @app.route('/') def index(): return render_template('pk.html') @app.route('/pk/<username>') def pk(username): user_socket = request.environ.get("wsgi.websocket") # type:WebSocket user_socket_dic[username] = user_socket print(len(user_socket_dic), user_socket_dic) try: while True: msg = json.loads(user_socket.receive()) to_user = msg.get('to_user') print(to_user) if to_user: to_msg = {"from_user":username, "msg": msg.get('msg')} user_socket_dic.get(to_user).send(json.dumps(to_msg)) print(to_msg) else: user_socket.send("10001") except WebSocketError as e: user_socket_list.remove(user_socket) return ''
if __name__ == '__main__':
http_server = WSGIServer(('192.168.56.1', 5000), app, handler_class=WebSocketHandler)
http_server.serve_forever()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <title>Title</title> </head> <body> <div class="container"> <div> <p>登陸我的socket:<input type="text" id="username"><button onclick="open_ws()">連接</button></p> <p>目標用戶:<input type="text" id="to_user"></p> <p>發送消息:<input type="text" id="msg"><button onclick="send_msg()">發送</button></p> </div> <div id="chat" style="width: 500px; height: 500px"></div> </div> <script type="text/javascript"> let ws = null; function open_ws() { let username = document.getElementById("username").value; ws = new WebSocket("ws://192.168.56.1:5000/pk/" + username); ws.onmessage = function (data) { let content = JSON.parse(data.data); let ptage = document.createElement("p"); ptage.innerText = content.from_user + "," + content.msg; document.getElementById("chat").appendChild(ptage); }; } function send_msg() { let msg = document.getElementById("msg").value; let to_user = document.getElementById("to_user").value; let data = {to_user:to_user, msg:msg}; ws.send(JSON.stringify(data)); } </script> </body> </html>