• 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()
    
  • 相关阅读:
    移动客户端系统升级思路
    markerORA12154:TNS:无法解析指定的连接标识符
    无法载入DLL 'sqlceme35.dll':找不到指定的模组。 ( 发生例外狀況於HRESULT: 0x8007007E )
    Building Graphically Advanced Applications with the .NET Compact Framework 3.5
    网管的自我修养序章
    网管的自我修养工具准备
    网管的自我修养人际关系
    关于Asp.Net Forms身份认证
    博客开篇的一些感想
    UITableViewCell和UITableViewHeaderFooterView的重用
  • 原文地址:https://www.cnblogs.com/liuzhanghao/p/12145945.html
Copyright © 2020-2023  润新知