26.websocket

群聊:

from flask import Flask, render_template, request
from geventwebsocket.handler import WebSocketHandler, WebSocket

from gevent.pywsgi import WSGIServer
app = Flask(__name__)

user_socket_list = []


@app.route("/ws")
def ws():

    user_socket = request.environ.get('wsgi.websocket')  # type:WebSocket
    if user_socket:
        user_socket_list.append(user_socket)

    while 1:
        msg = user_socket.receive()
        for u_socket in user_socket_list:
            if u_socket != user_socket:
                u_socket.send(msg)


if __name__ == '__main__':
    http_server = WSGIServer(("0.0.0.0", 8000), app, handler_class=WebSocketHandler)
    http_server.serve_forever()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p id="p_str">fasd</p>
</body>
</html>
<script type="application/javascript">
        var ws = new WebSocket("ws://172.20.163.45:8000/ws");
        ws.onmessage = function (data) {
            p_tag = document.createElement("p");
            p_tag.innerText = data.data;
            parent_p = document.getElementById("p_str");
            parent_p.appendChild(p_tag)
        };
</script>

一对一:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text" id="username"> <button onclick="login()">登录</button>
<input type="text" id="to_user">

<input type="text" id="msg"> <button onclick="sendMsg()">发送</button>
<div id="p_str">fasd</div>
</body>
</html>
<script type="application/javascript">
        var ws = null;
        function login() {
            var username = document.getElementById("username").value;
            ws = new WebSocket("ws://172.20.163.45:8000/ws/" + username);
            ws.onmessage = function (data) {
                var p_tag = document.createElement("p");
                recv_msg = JSON.parse(data.data);
                p_tag.innerText = recv_msg.from_user + ":" +  recv_msg.msg;
                parent_p = document.getElementById("p_str");
                parent_p.appendChild(p_tag)
            };
        }
        function sendMsg() {
            var to_user = document.getElementById("to_user").value;
            var msg = document.getElementById("msg").value;
            send_msg = {
                "to_user": to_user,
                "msg": msg
            };
            ws.send(JSON.stringify(send_msg))
        }
</script>
import json

from flask import Flask, render_template, request
from geventwebsocket.handler import WebSocketHandler, WebSocket

from gevent.pywsgi import WSGIServer
app = Flask(__name__)

user_socket_list = []

user_socket_dict = {

}


@app.route("/ws/<username>")
def ws(username):

    user_socket = request.environ.get('wsgi.websocket')  # type:WebSocket
    if user_socket:
        user_socket_dict[username] = user_socket

    while 1:
        msg = user_socket.receive()
        msg_dict = json.loads(msg)
        msg_dict["from_user"] = username
        to_user = msg_dict.get("to_user")
        usocket = user_socket_dict[to_user]

        usocket.send(json.dumps(msg_dict))


if __name__ == '__main__':
    http_server = WSGIServer(("0.0.0.0", 8000), app, handler_class=WebSocketHandler)
    http_server.serve_forever()
原文地址:https://www.cnblogs.com/liuzhanghao/p/12145945.html