Flask socketIO 发出一系列事件
Flask socketIO emit series of events
我希望服务器在建立连接后向客户端 (React) 发出一系列事件,我试过:
@socketio.on('connect')
def test_connect():
for i in range(10):
emit('my response', {'data': 'Connected ' + str(i)})
time_module.sleep(2)
但事件同时显示在 Web 浏览器控制台中,就像它们同时到达一样,在反应中我使用:
useEffect(() => {
const socket = socketIOClient(ENDPOINT);
socket.on('my response', function (data) {
console.log('my response: ', data.data);
})
})
您的服务器代码中存在两个潜在问题。
首先,你的例子中的time_module
是什么?我怀疑你正在做的是阻塞性睡眠。相反,我建议你好好睡觉 socketio.sleep(2)
.
第二个问题是您在 connect
事件处理程序中执行此操作。 Socket.IO 服务器会一直等到你 return 从连接处理程序来决定是否接受或拒绝客户端,所以通常你不希望这个处理程序花费很长时间才能 运行,因为在您 return 之前,连接尚未完全建立。我建议您改为将此逻辑移至后台函数。
以下代码解决了这两个问题:
def initial_events():
for i in range(10):
emit('my response', {'data': 'Connected ' + str(i)})
socketio.sleep(2)
@socketio.on('connect')
def test_connect():
socketio.start_background_task(initial_events)
我希望服务器在建立连接后向客户端 (React) 发出一系列事件,我试过:
@socketio.on('connect')
def test_connect():
for i in range(10):
emit('my response', {'data': 'Connected ' + str(i)})
time_module.sleep(2)
但事件同时显示在 Web 浏览器控制台中,就像它们同时到达一样,在反应中我使用:
useEffect(() => {
const socket = socketIOClient(ENDPOINT);
socket.on('my response', function (data) {
console.log('my response: ', data.data);
})
})
您的服务器代码中存在两个潜在问题。
首先,你的例子中的time_module
是什么?我怀疑你正在做的是阻塞性睡眠。相反,我建议你好好睡觉 socketio.sleep(2)
.
第二个问题是您在 connect
事件处理程序中执行此操作。 Socket.IO 服务器会一直等到你 return 从连接处理程序来决定是否接受或拒绝客户端,所以通常你不希望这个处理程序花费很长时间才能 运行,因为在您 return 之前,连接尚未完全建立。我建议您改为将此逻辑移至后台函数。
以下代码解决了这两个问题:
def initial_events():
for i in range(10):
emit('my response', {'data': 'Connected ' + str(i)})
socketio.sleep(2)
@socketio.on('connect')
def test_connect():
socketio.start_background_task(initial_events)