Flask 烧瓶套接字io.on(';事件';)未处理,但.on(';消息';)工作正常

Flask 烧瓶套接字io.on(';事件';)未处理,但.on(';消息';)工作正常,flask,socket.io,Flask,Socket.io,我正在使用flask\u socketio开发一个flask应用程序,但事件不起作用 我使用@socketio.on('message')进行了测试,这部分工作正常,但@socketio.on('my_event')不起作用 这是me服务器端代码: @socketio.on('message') def句柄_消息(事件、数据): 发出('ping',数据) 打印('收到的消息:'+事件,数据) @socketio.on('ping') def ping(消息): 打印('事件',消息) 发出('

我正在使用
flask\u socketio
开发一个flask应用程序,但事件不起作用

我使用
@socketio.on('message')
进行了测试,这部分工作正常,但
@socketio.on('my_event')
不起作用

这是me服务器端代码:

@socketio.on('message')
def句柄_消息(事件、数据):
发出('ping',数据)
打印('收到的消息:'+事件,数据)
@socketio.on('ping')
def ping(消息):
打印('事件',消息)
发出('pong',消息)
以及客户端代码:


无功插座;
$(函数(){
socket=io.connect('http://'+document.domain+':'+location.port);
socket.on('connect',function(){
console.log('connected');
send('ping',{foo:'bar'});
});
socket.on('ping',函数(数据){
console.log('ping',数据);
});
socket.on('pong',函数(数据){
log('it works!!!',data);
});
});
在服务器端,我得到了以下信息:
接收到的消息:ping{'foo':'bar'}
,这意味着来自客户端的消息是由
@socketio.on('message')
发送和截获的,而不是由
@socketio.on('ping')发送和截获的。


我错过了什么?谢谢。

它的工作原理与您描述的完全一样

片段:

@socketio.on('message')
def handle_message(event, data):
    emit('ping', data)
    print('received message: ' + event, data)
@socketio.on('ping')
def ping(message):
    print('event', message)
    emit('pong', message)
处理一个且唯一的特定事件,称为
消息
。该事件在客户端中通过调用
socket.send(data)
触发,使用
send()
时不必提供事件名称

下一个片段:

@socketio.on('message')
def handle_message(event, data):
    emit('ping', data)
    print('received message: ' + event, data)
@socketio.on('ping')
def ping(message):
    print('event', message)
    emit('pong', message)
处理一个且唯一一个名为
ping
的事件。要触发此类事件(命名事件),您需要明确提供其名称,并使用
emit(event\u name,data)
而不是
send(data)

如果还想触发“我的事件”事件,则需要调用附加的
emit()


另外,当您使用
socket.send('ping',{foo:'bar})时
,事实上,您使用两个参数调用了消息事件:
'ping'
{foo:'bar'}
。我认为这不是您的意图,您只需要一个命名事件,即:
“我的事件”

非常感谢,我确实解决了问题,但这很好地解释了情况。