【发布时间】:2013-09-27 10:53:42
【问题描述】:
早安,
我遇到了一些麻烦,我希望有人能在这里帮助我。我想做的是在 Gevent Socket-IO 名称空间中访问 Flask 会话。
我尝试将烧杯用作中间件客户端,但我仍然无法从 socket-io 名称空间中访问和更新会话信息。
我对这一切都很陌生,所以任何帮助都将不胜感激。
【问题讨论】:
标签: flask beaker gevent-socketio
早安,
我遇到了一些麻烦,我希望有人能在这里帮助我。我想做的是在 Gevent Socket-IO 名称空间中访问 Flask 会话。
我尝试将烧杯用作中间件客户端,但我仍然无法从 socket-io 名称空间中访问和更新会话信息。
我对这一切都很陌生,所以任何帮助都将不胜感激。
【问题讨论】:
标签: flask beaker gevent-socketio
使用默认的 Flask 会话,似乎可以在初始化命名空间时共享(只读访问)会话数据。
session_dict=dict(session)
socketio_manage(request.environ, {'/news': NewsNamespace}, request=session_dict)
session_dict 然后可以在命名空间中作为self.request 访问。这是一个 hack,但 Flask/werkzeug 会话似乎无论如何都不能在请求上下文之外工作。
我在 Flask 会话中放置了一个会话 ID(随机生成的 uuid)。然后,Flask 视图和命名空间都知道会话 ID,并且都可以在 Redis 或其他数据存储中的服务器端会话中读取/写入数据,会话 ID 作为键。
这只是我用来在 Flask 和 gevent-socketio 之间共享会话的解决方案;我没有尝试过 Beaker,不确定您在使用它时遇到了哪些具体问题,或者是否有更好的解决方案。
【讨论】: