首页 > 解决方案 > 尽管使用了 socketio.run(),但“Flask-SocketIO 正在 Werkzeug 下运行”

问题描述

尽管使用了 socketio.run(),但我在使用 Eventlet 运行 Flask 和 SocketIO 时遇到了问题,欢迎提出任何建议。我目前使用的是 Python 3.9,并且我尝试了每个模块的多个不同版本,但无济于事。

[2021-04-04 06:39:05,709] WARNING in __init__: Flask-SocketIO is Running under Werkzeug, WebSocket is not available.
"GET /socket.io/?EIO=4&transport=websocket HTTP/1.1" 400 -

索引.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SAR</title>
    <script src="https://cdn.socket.io/3.1.3/socket.io.min.js" integrity="sha384-cPwlPLvBTa3sKAgddT6krw0cJat7egBga3DJepJyrLl4Q9/5WLra3rrnMcyTyOnh" crossorigin="anonymous"></script>
</head>
<body>

<button id="ping" onclick="send()">ping</button>

<script>
    var socket = io.connect("http://" + document.domain + ":" + location.port, {transports: ['websocket']});

    socket.on("connect", function(){
        socket.emit("ping", "Established a connection, pinging!");
    });

    socket.on("pong", function(response){
        console.log(response)
    });

    function send(){
        socket.emit("ping", "ping_data");
    }
</script>

</body>
</html>

应用程序.py

from flask import Flask, render_template
from flask_socketio import SocketIO, emit
import eventlet

app = Flask(__name__)
socketio = SocketIO(app, logger=True)

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

def receivedCallback():
  print('Pong received by user!')

@socketio.on( 'ping' )
def handle_ping(data):
  print("received", data)
  socketio.emit('pong', "pong_data", callback=receivedCallback)

if __name__ == '__main__':
  socketio.run(app)

标签: pythonflaskflask-socketioeventlet

解决方案


似乎通过终端运行我的主文件可以解决此问题。如果有人知道这是为什么,请分享,谢谢。:)

python app.py


推荐阅读