9.基于类的命名空间

优质
小牛编辑
128浏览
2023-12-01

以上描述的作为基于装饰器的活动处理函数的替代,属于命名空间的活动处理函数可以被创造成一个类的方法。Flask_socketio.Namespace提供了一个基于类的方法来创造命名空间。

from flask_socketio import Namespace, emit

class MyCustomNamespace(Namespace):
  def on_conect():
    pass
  def on_disconnect():
    pass
  def on_my_event(data):
    emit('my_response', data)

socket.on_namespace(MyCustomNamespace('/test'))

使用一个基于类的命名空间时,所有服务器接收到的活动将会被分配到一个方法,该方法的活动名称是以on_为前缀的活动。例如,名称为my_event的活动,将会由on_my_event函数来处理。如果一个接收到的活动在命名空间类中没有与之相匹配的处理方法。这个活动将会被忽略。所有在基于类的命名空间内的活动必须使用具有合法的方法名称的单词。

作为一个定义基于类的命名空间的简便方法,这个命名空间实例包括了几个版本的flask_socketio.SocketIO类,并且他们默认的命名空间参数并没有给出。

如果一个活动同时具有在基于类的命名空间里的处理函数和基于装饰器的处理函数,只有装饰器函数会被调用。