在Gevent Socket-IO中使用Flask Session

Rec*_*ive 6 beaker flask gevent-socketio

早上好,

我遇到了一些麻烦,我希望有人能在这里帮助我.我想要做的是访问Gevent Socket-IO Name空间中的Flask会话.

我曾尝试将beaker用作中间件客户端,但我仍然无法从socket-io名称空间中访问和更新会话信息.

我对这一切都很陌生,所以任何帮助都将不胜感激.

xli*_*xli 3

使用默认的 Flask 会话,似乎可以在命名空间初始化时共享(通过只读访问)会话数据。

session_dict=dict(session)
socketio_manage(request.environ, {'/news': NewsNamespace}, request=session_dict)
Run Code Online (Sandbox Code Playgroud)

session_dict然后就可以像self.request在命名空间中一样进行访问。这是一个 hack,但 Flask/werkzeug 会话似乎无法在请求上下文之外工作。

我在 Flask 会话中放置了一个会话 ID(随机生成的 uuid)。然后,Flask 视图和命名空间都知道会话 ID,并且都可以以会话 ID 作为键在 Redis 或其他数据存储中的服务器端会话中读取/写入数据。

这只是我用于在 Flask 和 gevent-socketio 之间共享会话的解决方案;我还没有尝试过 Beaker,不确定您在使用它时遇到了什么具体问题,或者是否有更好的解决方案。