gpt4 book ai didi

python - 如果socketIO实例是类成员变量,如何用flask-socketio修饰类函数?

转载 作者:行者123 更新时间:2023-12-02 03:13:12 27 4
gpt4 key购买 nike

我正在尝试使用 socketio 为 Flask 应用程序创建一个 hello world 示例,该示例被包装到一个类中。

我想将整个应用程序包装到一个类中,该类可以嵌入到其他应用程序中。为此,我在类的构造函数中创建 Flask 应用程序,并创建 SocketIO 实例作为成员。问题是我收到一个 NameError 异常,告诉我“socketio”未定义。

我尝试改编最小工作示例:flask-socketio 教程 ( https://flask-socketio.readthedocs.io/en/latest/ )

这是我试图开始工作的示例代码:

from flask import Flask
from flask_socketio import SocketIO, emit

class ApplicationExample:

def __init__(self):
self.app = Flask(__name__)
self.socketio = SocketIO(self.app)

@socketio.on('ping')
def pongResponse(self, message):
emit('pong')

def run(self):
self.socketio.run(service.app, host='0.0.0.0')

if __name__ == '__main__':
service = ApplicationExample()
service.run()

我想将 pongResponse 函数绑定(bind)到我的类中的 socketio 实例。如何在将 SocketIO 类作为成员的情况下装饰该函数?

最佳答案

根据文档,您可以使用以下内容代替装饰器

def my_function_handler(data):
pass

socketio.on_event('my event', my_function_handler, namespace='/test')

这会变成这样

from flask import Flask
from flask_socketio import SocketIO, emit

class ApplicationExample:
def __init__(self):
self.app = Flask(__name__)
self.socketio = SocketIO(self.app)
self.socketio.on_event('ping', self.pongResponse, namespace='/test')

def pongResponse(self, message):
emit('pong')

def run(self):
self.socketio.run(service.app, host='0.0.0.0')

关于python - 如果socketIO实例是类成员变量,如何用flask-socketio修饰类函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56970102/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com