gevent-websocket初识

初试

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>

结果

gevent-websocket初识

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>

gevent-websocket初识

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("") 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>

gevent-websocket初识gevent-websocket初识

上一篇:牛客提高R5 A.同余方程


下一篇:生日蜡烛(蓝桥杯)python