Как сделать несколько событий с Flask SocketIO? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть соединение socetio, которое обеспечивает поиск по нажатию кнопки:

$(document).ready(function () {
        var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('connect', function () {
            socket.emit('seatch event', {
                data: 'App Started'
            })
            var form = $('form').on('submit', function (e) {
                let search_query = $('#search_text').val()
                socket.emit('search event', {
                    search_query: encodeURIComponent(search_query)
                })
            })
        });

socket.on('search_results_event', function (msg) {
    //do someting
});

Теперь я хочу добавить другое событие, в моем случае я хочу отправлять данные на сервер и получать ответ каждый раз, когда <li> элемент в списке становится activate.
Как я могу добавить это событие?Я должен добавить еще connection?
Любые советы?

1 Ответ

2 голосов
/ 23 сентября 2019

Вам не нужно другое соединение.Как только сокет подключен, вы можете просто использовать socket.on, поскольку вам уже нужно перехватывать события, отправленные с сервера, и emit , например, socket.emit('[event_name], [data_object]), для отправки данных на сервер.

На стороне javacript вы излучаете вот так

socket.emit('my_event', {'message': 'hello world'})

Вы можете справиться с этим на стороне flask с помощью

@socketio.on('my_event')
def handle_my_event(data):

    print('Received an instance of my_event')

    #  will print {'message': 'hello world'}
    print(data) 

Аналогично вы можете отправлять события изflask сервер, такой как ваш search_results_event от

from flask_socketio import emit

emit('search_results_event', {'key': 'value'})

, который будет обрабатываться вашим существующим socket.on в вопросе.Второй аргумент emit - это данные, которые вы хотите отправить - обычно это json.

См. документы для получения дополнительной информации.

...