import json from flask import Flask,request,render_template from geventwebsocket.handler import WebSocketHandler # 提供WS协议处理 from geventwebsocket.server import WSGIServer # 承载服务 from geventwebsocket.websocket import WebSocket # 语法提示 app = Flask(__name__) @app.route(" ") def (): return if __name__ == '__main__': # app.run("0.0.0.0",9527) http_serv = WSGIServer(("0.0.0.0",9527),app,handler_class=WebSocketHandler) http_serv.serve_forever()
私聊(。py)
客户端 # 服务端 # Http Flask 浏览器 # Websocket GeventWebsocket+Flask 客户端JavaScript(Websocket客户端) from flask import Flask,request,render_template from geventwebsocket.handler import WebSocketHandler # 提供WS协议处理 from geventwebsocket.server import WSGIServer # 承载服务 from geventwebsocket.websocket import WebSocket # 语法提示 app = Flask(__name__) user_socket_list = [] @app.route("/my_socket") def my_socket(): # 获取当前客户端与服务器的Socket连接 request.environ 获取的是请求的原始信息 user_socket = request.environ.get("wsgi.websocket") # type:WebSocket
if user_socket: user_socket_list.append(user_socket) print(len(user_socket_list),user_socket_list) # print(user_socket,"OK 连接已经建立好了,接下来发消息吧")
while 1: msg = user_socket.receive() #服务器等待 客户端发完消息往下处理 不发消息等待 print(msg) for usocket in user_socket_list: try: usocket.send(msg) except: continue # user_socket.send(msg) # print(request.headers) @app.route("/gc") def gc(): return render_template("gc.html") if __name__ == '__main__': # app.run("0.0.0.0",9527) http_serv = WSGIServer(("0.0.0.0",9527),app,handler_class=WebSocketHandler) http_serv.serve_forever()
私聊 。html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>私聊</title> </head> <body> <p>我的昵称:<input type="text" id="username"> <button onclick="loginGc()">登录</button> </p> <p>给<input type="text" id="to_user">发送<input type="text" id="content"> <button onclick="send_msg()">发送</button> </p> <div id="chat_list"> </div> </body> <script type="application/javascript"> var ws = null; function loginGc() { var username = document.getElementById("username").value; ws = new WebSocket("ws://192.168.16.56:9527/my_socket/" + username); // 监听电话 ws.onmessage = function (eventMessage) { console.log(eventMessage.data); str_obj = JSON.parse(eventMessage.data); var p = document.createElement("p"); p.innerText = str_obj.from_user +" : "+str_obj.chat; document.getElementById("chat_list").appendChild(p); }; }; function send_msg() { var username = document.getElementById("username").value; var to_user = document.getElementById("to_user").value; var content = document.getElementById("content").value; var sendStr = { from_user:username, to_user:to_user, chat:content }; ws.send(JSON.stringify(sendStr)); }; </script> </html>