Регистрация событий сервера с помощью фляги SocketIO
Я начинаю работать с колбой и SocketIO, используя https://github.com/miguelgrinberg/Flask-SocketIO.
Я хочу опубликовать строку на сервере фляги, а затем через SocketIO отправить ее на веб-страницу клиента.
Обычно мой почтовый код будет выглядеть так:
@app.route('/index',methods=['POST'])
def index():
token = request.form['token']
Насколько я понимаю, что-то вроде следующего необходимо для передачи данных с сервера на страницу клиента:
@socketio.on('event', namespace='/test')
def test_message(message):
emit('my response', {'data': message['data']}, broadcast=False)
Мне не ясно, как связать две функции вместе, чтобы в сообщении значение токена передавалось клиенту.
Самое близкое, что я могу найти в документах:
Receiving Messages¶
When using SocketIO messages are received by both parties as events. On the client side Javascript callbacks are used. With Flask-SocketIO the server needs to register handlers for these events, similarly to how routes are handled by view functions.
Как я могу заставить это работать?
1 ответ
Решение
Вы правы в своих предположениях. Сначала отправьте данные в Flask:
.ajax({
url: "{{ url_for('index') }}",
method: "POST",
data: {
token: "value"
}
});
Ваше мнение будет выглядеть
@app.route('/index',methods=['POST'])
def index():
token = request.form['token']
test_message(dict(data=token))
return '1'
И ваш JavaScript будет выглядеть примерно так
var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);
socket.on('connect', function() {
socket.emit('my event', {data: 'I\'m connected!'});
});
socket.on('my response', function(msg) {
// do something with msg.data
});