我正在创建一个从 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)`
为什么添加房间参数收不到数据?
这在您的客户中发出:
sio.emit('join_room', 'my_room')
实际上什么都不做。请记住,房间都是在服务器上管理的,客户端不能直接加入房间,必须请求服务器才能加入。您的服务器没有
join_room
事件的处理程序,因此您发送的发射将被丢弃。
您应该在您的服务器中为此事件添加一个处理程序,并在其中调用
join_room()
函数将用户放入请求的房间。也许是这样的:
@socketio.on('join_room')
def on_join_room(room_name):
join_room(room_name)