Регистрация событий сервера с помощью фляги 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
});
Другие вопросы по тегам