flask + websocket实现简单的单聊和群聊
单聊
from flask import Flask,request,render_template from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from geventwebsocket.websocket import WebSocket import json app = Flask(__name__) user_socket_dict = {} @app.route('/ws/python代码') def ws(username): user_socket = request.environ.get('wsgi.websocket') # type:WebSocket user_socket_dict[username] = user_socket print(len(user_socket_dict),user_socket_dict) while 1: try: msg = user_socket.receive() msg = json.loads(msg) to_user = msg.get('to_user') content = msg.get('msg') usocket = user_socket_dict.get(to_user) recv_msg = { 'from_user':username, 'msg':content } usocket.send(json.dumps(recv_msg)) except: pass @app.route('/chat') def chat(): return render_template('chat.html') if __name__ == '__main__': http_serv = WSGIServer(('0.0.0.0',5000),app,handler_class=WebSocketHandler) http_serv.serve_forever()
"en"> "UTF-8">页面单聊 "text" id="username">给:"text" id="to_user">
发送消息:"text" id="msg">
"chat" style="width: 500px; height: 500px;">
群聊
#!/usr/bin/env python # -*- coding=utf-8 -*- from flask import Flask,request,render_template from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from geventwebsocket.websocket import WebSocket import json app = Flask(__name__) user_socket_list = [] @app.route('/ws') def ws(): user_socket = request.environ.get('wsgi.websocket') # type:WebSocket user_socket_list.append(user_socket) print(len(user_socket_list),user_socket_list) while 1: try: msg = user_socket.receive() for usocket in user_socket_list: if usocket != user_socket: usocket.send(msg) except: user_socket_list.remove(user_socket) @app.route('/chat') def chat(): return render_template('ws.html') if __name__ == '__main__': http_serv = WSGIServer(('0.0.0.0',5000),app,handler_class=WebSocketHandler) http_serv.serve_forever()Python代码
"en"> "UTF-8">页面Title 发送消息:"text" id="msg">
"chat" style="width: 500px;height: 500px;">