【发布时间】:2014-05-17 10:14:25
【问题描述】:
这是一个理论问题,因为我对这个概念只有一个概念,还没有任何代码。
假设我将 Websockets 与 Tornado 一起使用,并以桥接方式使用一个 django 项目来处理常规连接。这意味着:实际的服务器是 Tornado,它接收每个请求,如果请求没有 /socket 的路径(比如),django wsgi 处理程序将处理它(通过后备容器)。另一方面,对 /socket 路径的请求必须具有 ws 或 wss 协议,并被 Tornado 视为 websocket。
连接开始时,升级前的第一个请求会有cookies,我可以从cookies中获取会话ID,并使用会话管理器通过ID获取会话对象。对于该连接的失效,由于它是一个 websocket 连接,它将是一个长期的连接,我将具有相同的会话 id cookie 值(因为我无法获取 cookie 标头,因为 websocket 连接没有t 不再发送标头 - 想法是减少开销,并且通过消息传递 cookie 可能会产生巨大的开销)。
到目前为止一切正常:Websockets 连接,只发送一次 cookie,绑定到该套接字的服务器端可以拥有该 cookie 值(会话 id)并使用它直到连接关闭。
我的问题:如何实时检测会话不再可用? (可能的原因:1.用户发布了一个涉及关闭当前会话的资源,尽管它是通过 AJAX 完成的并且 websocket 没有关闭;2.会话由于空闲而过期;3.通过使用 django api 以某种方式关闭了会话,虽然这并不意味着当前的执行上下文是请求被关闭 - 我不知道这种情况是否可能)。
注意事项:检测特定会话何时关闭可以帮助我确定相应的 websocket 是否也必须关闭。
【问题讨论】:
标签: django session cookies websocket tornado