Flask SocketIO无法向指定房间发射数据的问题排查
问题原因及解决办法
你的问题核心是服务端未处理客户端发送的join_room请求,导致客户端实际并未加入my_room房间,因此服务端向该房间发送消息时,客户端无法接收。
具体问题点
客户端在连接成功后触发了sio.emit('join_room', 'my_room'),但服务端没有对应事件处理函数来调用join_room()方法,将客户端纳入指定房间。
修复后的服务端代码
补充处理join_room事件的函数,同时修正代码里的语法错误:
from flask import Flask 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') # 新增join_room事件处理函数,将客户端加入指定房间 @socketio.on('join_room') def handle_join_room(room_name): join_room(room_name) print(f'Client joined room: {room_name}') @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)
额外修正点
你原服务端代码存在两处语法错误,会导致运行异常:
app = Flask(name)需改为app = Flask(__name__)if name == 'main':需改为if __name__ == '__main__':
内容的提问来源于stack exchange,提问作者20MillionMax
相关产品推荐
相关产品推荐

