Flask リクエストをコンテキスト外で使用できるようにしたいと考えています。
Flask 0.10 以降、decorator() を使用してそれを行うことができることに気付きました。これが、そのデコレータを使用して、 flask-socket@copy_current_request_context
を変更しようとしている方法です。具体的には、フラスコ ソケット の一部であるデコレータ:@socket.route
def route(self, rule, request, **options):
def decorator(f):
endpoint = options.pop('endpoint', None)
@copy_current_request_context
def do_some_work():
env = request.environ['wsgi.websocket']
self.add_url_rule(rule, endpoint, f,env, **options)
gevent.spawn(do_some_work)
return f
return decorator
これが生成するエラーは私には理にかなっていますが、私が望むことを行う方法があると仮定しています.
RuntimeError: This decorator can only be used at local scopes when a
request context is on the stack. For instance within view functions.
リクエストをデコレータに渡そうとしましたが、うまくいきませんでした。
もう少しコンテキストを提供するために、変数(リクエスト環境であると理解しています)request.environ['wsgi.websocket']
にアクセスできるように、 Sockets オブジェクト内の dictに追加しようとしています。ws
より高いレベルでは、関数またはビューws.send()
以外の場所@route
(おそらくソケット オブジェクト インスタンスにアクセスできる別のスレッド) から実行できる機能が必要です。
私はSocket-IOで同様のことをしました-socketio
オブジェクトはあなたができる必要があるすべてでありsend()
、recieve()
データです-しかし、Socketsではwsオブジェクトが必要なようです.request.environ['wsgi.websocket']