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'}
。我认为这不是您的意图,您只需要一个命名事件,即:“我的事件”
非常感谢,我确实解决了问题,但这很好地解释了情况。