4.接收消息
优质
小牛编辑
136浏览
2023-12-01
在使用SocketIO的时候,消息将被作为活动(event)的两端接收。在客户端使用JavaScript回叫信号。使用Flask-SocketIO服务器,需要为这些活动注册处理器(handler),类似于视图函数怎样处理路由。
下面的例子是为一个未命名的活动创建了一个服务端的活动处理器(event handler):
@socketio.on('message') def handle_message(message): print('received message: ' + message)
在上面的例子中,使用了字符串消息。此外,另一种未命名的活动使用了JSON数据:
@socketio.on('json') def handle_json(json): print('received json: '+ str(json))
最灵活的一种活动使用了自定义的活动名称。这些活动的消息数据类型可以是字符串,字节,整型,或者JSON:
@socketio.on('my event') def handle_my_custom_event(json): print('received json: ' + str(json))
自定义名称的活动可以支持多参数:
@socketio.on('my event') def handle_my_sustom_event(arg1, arg2, arg3): print('received args: ' + arg1 + arg2 + arg3)
命名活动是极度复杂的,在其消除了额外的元数据(metadata)来描述消息类型的时候。
Flask-SocketIO同样支持命名空间(namespace),这个功能允许客户端在一个相同的物理socket上多路复用几个独立的连接:
@scoketio.on('my event', namespace='/test') def handle_my_custom_namespace_event(json): print('received json: ' + str(json))
当一个命名空间没有具体指出,一个全局的命名空间'/'将会被启用
有时,装饰器的语法并不方便,on_event()方法可以作为替代
def my_function_handler(data): pass socketio.on_event('my event', my_function_handler, namespace='/test')
客户端要求一个确认回复,来确认消息的接收。任何一个从处理函数(handler function)中返回的值都会在回调函数中作为一个参数返回给客户端。
@socketio.on('my event') def handle_my_custom_event(json): print('received json: ' + str(json)) return('one', 2)
在上面的例子中,客户端回调函数将会回调两个参数,one
和2
。如果处理函数没有返回值,这个客户端回调函数将以没有参数的情况返回。