Flask+ geventwebsocket实现聊天室

744 阅读1分钟

1 安装 geventwebsocket

pip install gevent-websocket

视频地址:www.bilibili.com/video/BV1Q7…

2 前端代码

<div  id="mesg" style="width: 400px;height: 400px;background: #aaaaaa;font-size: 18px;color: #e51c23"></div>


<script type="application/javascript">
    {#    使用ws协议  #}
    var ws =new WebSocket("ws://127.0.0.1:8899/ws")
    ws.onmessage = function (data){
        console.log(data);
        var ptag = document.createElement("p");
        ptag.innerText =data.data;
        document.getElementById("mesg").appendChild(ptag)
    }
    function send_msg(){
        var msg = document.getElementById("inputmsg").value;
        ws.send(msg)
    }
</script>

3 后端代码

from flask import Flask,render_template,request
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from geventwebsocket.websocket import WebSocket
import pprint
app =Flask(__name__)

#  将用户加入到用户列表存起来
user_socket_list =[]
@app.route("/ws")
def ws():
    try:
        user_socket = request.environ.get("wsgi.websocket")  # type:WebSocket
        user_socket_list.append(user_socket)
        print(user_socket_list)
        print("当前用户数量:%d"%len(user_socket_list))
        if user_socket:
            # print(user_socket)
            # print(type(user_socket))
            while True:
                msg =user_socket.receive()
                for user in user_socket_list:
                    try:
                       user.send("用户[%s]: %s"%(user,msg))
                    except:
                        print("用户不存在")
                        continue
                print(msg)
    except:
        print("建立连接失败!!")
    return

@app.route("/")
def index():
    return render_template("ws.html")

# 运行Flask
if __name__ == '__main__':
    # app.run(debug=False)
    http_serv = WSGIServer(("0.0.0.0", 8899), app, handler_class=WebSocketHandler)
    http_serv.serve_forever()