如何使用Flask SocketIO进行多个事件?

时间:2019-09-23 00:26:59

标签: flask flask-socketio

我有一个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 个答案:

答案 0 :(得分:2)

您不需要其他连接。连接套接字后,您就可以使用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。

有关更多信息,请参见the docs