使用Flask套接字请求/ ws脱离上下文

时间:2015-07-24 10:48:55

标签: sockets flask request python-decorators flask-sockets

我希望能够脱离上下文使用Flask请求。

我知道自Flask 0.10以来,有一个装饰器(@copy_current_request_context)可以做到这一点,这就是我使用该装饰器来尝试和修改flask-socket的方法。特别是@socket.route装饰器,它是 flask-socket 的一部分:

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 - 也许是可以访问套接字对象实例的另一个线程。 / p>

我已经使用 Socket-IO 做了类似的事情 - socketio对象就是send()recieve()所需的全部内容数据 - 但是对于套接字,您似乎需要ws对象,即request.environ['wsgi.websocket']

0 个答案:

没有答案