在 Flask 中使用套接字时获取 200 代码

Getting 200 code when using sockets in Flask

我有 Flask 服务器,它使用 flask-socketio 处理 HTTP 请求和 WebSocket。服务器代码在这里:

from flask_socketio import SocketIO, emit
from flask import Flask

app = Flask(__name__)
socketio = SocketIO(app)

@socketio.on('response')
def message(data):  
    time.sleep(1)
    emit('sensor', {"data": "hello"})
    
@socketio.on('connect')
def connect():
    emit('after connect')

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

html 中的脚本标记如下所示:

<script>
    var socket = io("ws://192.168.100.3:5000");
            
    socket.on('after connect', function(msg) {
        console.log('connected')
        socket.emit('response', msg)
    });
            
    socket.on('sensor', function(msg) {
        console.log(msg.data)
        socket.emit('response', msg)
    });     
</script>

一切正常,我收到了通信,但让我担心的一件事是,在服务器 运行 的终端中,我收到 GET 和 POST 请求的代码 200。

192.168.100.10 - - [17/Apr/2022 11:36:27] "GET /socket.io/?EIO=2&transport=polling&t=1650191787548-1094&sid=faed6806df0a437d8d17bd8a294f8754 HTTP/1.1" 200 -
192.168.100.10 - - [17/Apr/2022 11:36:27] "POST /socket.io/?EIO=2&transport=polling&t=1650191788570-1095&sid=faed6806df0a437d8d17bd8a294f8754 HTTP/1.1" 200 -

我在控制台得到回应我认为沟通是正确的。但是随着那些要求我“制造”网络浏览器中每秒资源使用量的请求越来越大。少量但仍然。据我所知,WebSockets 不应该向服务器发送 HTTP 请求,但它必须是 TCP/IP 持续连接。

我哪里做错了,还是我的WebSockets理解错了?

GET 和 POST 请求在那里,因为您正在使用 Socket.IO。正如其 documentation 中所述,Socket.IO 在尝试建立 WebSocket 连接之前以 HTTP long-polling 开头。如果它不能使用 WebSocket,它也会回退到 HTTP long-polling。