在 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。
我有 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。