Flask SocketIO 不会向特定房间发送数据

问题描述 投票:0回答:1

我正在创建一个从 Flask 应用程序获取数据的程序,并且可以将数据发送到 Flask 应用程序,我正在使用 Socket IO 来执行此操作。

socketio.emit('receive_data', data) 

这在发送到这里时最终起作用:

@sio.on('receive_data')   
def handle_receive_data(data):         
    print('Received data:', data)

但是当我添加房间参数时

socketio.emit('receive_data', data, room='my_room') 

突然间,接收数据从未被调用过。这是我的程序的完整代码:

import socketio

sio = socketio.Client()

@sio.on('connect') 
def on_connect():
    print('Connected to server')
    sio.emit('join_room', 'my_room')

@sio.on('receive_data')
def handle_receive_data(data):
    print('Received data:', data)

sio.connect('http://localhost:5000')
sio.wait()

这是我的烧瓶应用程序的完整代码:

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

app = Flask(name)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@socketio.on('connect')
def handle_connect():
    print('Client connected')

@app.route('/')
def home():
    return 'home'

@app.route('/send')
def send():
    data = {'foo': 'bar'}
    socketio.emit('receive_data', data, room='my_room')
    print('Sent data:', data)return 'sent data'

if name == 'main':
    socketio.run(app, host='localhost', port=5000)`

为什么添加房间参数收不到数据?

python flask socket.io flask-socketio
1个回答
0
投票

这在您的客户中发出:

sio.emit('join_room', 'my_room')

实际上什么都不做。请记住,房间都是在服务器上管理的,客户端不能直接加入房间,必须请求服务器才能加入。您的服务器没有

join_room
事件的处理程序,因此您发送的发射将被丢弃。

您应该在您的服务器中为此事件添加一个处理程序,并在其中调用

join_room()
函数将用户放入请求的房间。也许是这样的:

@socketio.on('join_room')
def on_join_room(room_name):
    join_room(room_name)
© www.soinside.com 2019 - 2024. All rights reserved.