基于Flask框架使用Web Socket实现收发机制

前端js的收发机制:

    // 新建一个websocket链接
       var ws = new WebSocket("%s://%s/foobar/");

  // 链接成功时,可以在函数中做一些操作

  ws.onopen = function() {}


       // 接收后端发送过来的数据
  ws.onmessage = function(e) {}


  // 进行异常处理
  ws.onerror = function(e) {}


  // 关闭链接
  ws.onclose = function(e) {}


        // 向后端发送数据
  s.send(value);

后端代码:

from flask import Flask,request
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer

from geventwebsocket.websocket import WebSocket  # 做语法提示用的

app = Flask(__name__)  # type: Flask


@app.route("/ws")
def web_sck():
    # print(request.environ)  #  打印的原始请求数据
    # 这个东西其实就是WebSocket的长链接
    user_socket = request.environ.get("wsgi.websocket")   # type: WebSocket
    while 1:
        msg = user_socket.receive()  # 接收客户端传入数据
        # 在浏览器中content的中输入ws ,readyState如果为1 表示连接成功,如果等于3表示,连接成功后又断开了连接,0 表示没有开启
        print(msg)
        try:
            user_socket.send(msg)  # 把接收到的数据,返回给前端
        except:
            return

if __name__ == "__main__":
    # app.run("0.0.0.0",8000,debug=True)
    http_serve = WSGIServer(("0.0.0.0",8000),app,handler_class=WebSocketHandler)
    http_serve.serve_forever()  # 启动这个web-server请求

前端代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>多人聊天</title>
</head>
<body>
<script type="application/javascript">
    var ws = new WebSocket("ws://127.0.0.1:8000/ws") ; // 指定发送的链接地址
    ws.onopen = function(){
        ws.send("hello")
    };

    // 前端接收消息   ws_info 接收数据的容器
    ws.onmessage = function (ws_info) {
        console.log(ws_info.data)
    }
</script>
</body>
</html>
原文地址:https://www.cnblogs.com/mwhylj/p/10157133.html