这是一个理论问题,因为我对概念只有一个基本了解,并且还没有任何代码。
假设我使用Tornado的Websockets,并且以桥接方式使用Django项目处理常规连接。这意味着:实际服务器是Tornado,它接收每个请求,并且如果请求没有路径为/socket(例如),则Django WSGI处理程序将处理它(通过后备容器)。另一方面,请求/ socket路径必须具有ws或wss协议,并由Tornado视为Websockets处理。
当连接开始时,在Upgrade之前的第一个请求将具有cookie,我可以从cookie中获取会话ID,并使用会话管理器按ID获取会话对象。在该连接的失效期内,由于它是WebSocket连接,因此它将是长期连接,我将具有相同的会话ID cookie值(因为我无法再次获取cookie标头,因为WebSocket连接不再发送标头-想法是减少开销,并且传递带有消息的cookies可能会产生巨大的开销)。
到目前为止没问题:Websockets连接,仅发送一次cookie,该套接字的服务器端绑定可以具有该cookie值(会话ID)并在连接关闭之前使用它。
我的问题:如何实时检测会话不再可用? (可能的原因:1.用户发出涉及关闭当前会话的资源,尽管它是通过AJAX完成的,但WebSocket未关闭; 2.由于空闲时间过长而导致会话过期; 3.以某种方式通过使用Django API关闭会话,尽管这并不意味着当前执行上下文是正在关闭的请求-我甚至不知道是否可能出现这样的场景)。
注:检测特定会话何时关闭可以帮助我确定相应的Websockets是否也必须关闭。