• websocket实现群聊


    server
    
    
    
    # @File: 群聊
    from flask import Flask, render_template, request
    from geventwebsocket.handler import WebSocketHandler
    from gevent.pywsgi import WSGIServer
    from geventwebsocket.websocket import WebSocket
    
    app = Flask(__name__)
    user_socket_list = []
    
    
    @app.route('/ws')
    def ws():
        # 一个用户的长链接wsgi.websocket
        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)
        while 1:
            msg = user_socket.receive()
            print(msg)
            for usocket in user_socket_list:
                if user_socket == usocket:
                    continue
                try:
                    usocket.send(msg)
                except:
                    continue
    
    
    @app.route('/')
    def index():
        return render_template("many_person.html")
    
    
    if __name__ == '__main__':
        http_server = WSGIServer(("0.0.0.0", 7000), app, handler_class=WebSocketHandler)
        http_server.serve_forever()
    many_person.html


    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>发送内容:<input type="text" id="message"><button onclick="send_msg()">发送</button></p> <div id="msg_list" style=" 500px"> </div> </body> <script type="application/javascript"> var ws = new WebSocket("ws://192.168.12.41:7000/ws"); ws.onmessage = function (ws_status) { console.log(ws_status.data); var ptag = document.createElement("p"); ptag.innerText = ws_status.data; document.getElementById("msg_list").appendChild(ptag) }; function send_msg() { var msg = document.getElementById("message").value; var ptag = document.createElement("p"); ptag.style.cssText = "text-align: right"; ptag.innerText = msg; document.getElementById("msg_list").appendChild(ptag); ws.send(msg); } </script> </html>
  • 相关阅读:
    SpringBoot上传图片
    Java工具类(4) ------>运用easyexcel生成Excel表格
    SpringBoot(8) ------>集成SpringSecurity与Jwt
    docker_进阶
    jenkins基础
    C# 8 using declarations
    Sysmetric encryption and decryption via AES
    C# class implementation order of constructors include static constructor,constructor without modifiers and parameters, constructor with modifiers and parameters
    C# dictionary keys case insensitive
    Centos7安装Docker及运行hello-world
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/10157268.html
Copyright © 2020-2023  润新知