Tornado,Django,Websockets和Session同步

Lui*_*lli 5 django cookies session tornado websocket

这是一个理论上的问题,因为我对这个概念一无所知,并且还没有任何代码.

假设我使用带有Tornado的Websockets,并以桥接方式使用django项目来处理常规连接.这意味着:实际的服务器是龙卷风,其中接收到的每个请求,如果请求有/插座的不是路径(说),Django的WSGI处理程序将处理它(通过备用容器).另一方面,对/ socket路径的请求必须具有ws或wss协议,并被Tornado视为websockets.

当连接开始时,升级之前的第一个请求将具有cookie,我可以从cookie中获取会话ID,并使用会话管理器通过ID获取会话对象.对于这方面,它因为它是一个WebSocket连接的推移这将是一个长期的一个,我将会对会话cookie的值相同(因为我不能让阿恩饼干头,因为WebSocket连接没有按" t再发送头 - 想法是减少开销,并且传递带有消息的cookie可能会产生巨大的开销.

直到现在还可以:Websockets连接,只发送一次cookie,该套接字的服务器端绑定可以具有该cookie值(会话ID)并使用它直到连接关闭.

我的问题:如何实时检测到会话不再可用?(可能的原因:1.用户发布了包括关闭当前会话,althought它通过AJAX完成,WebSocket的未关闭的资源; 2,会话过期由于懒惰;通过使用Django API的会话关闭莫名其妙3,虽然这并不意味着当前的执行上下文就是请求被关闭 - 我不知道这种情况是否可行).

注意:检测特定会话何时关闭可以帮助我确定是否必须关闭相应的websockets.

Fre*_*jer 1

我假设您正在使用 django 的 cookie 系统(使用django.contrib.sessions.middleware.SessionMiddleware)。

您显然不希望每个 websocket 请求上的每个会话 cookie。然后由服务器来确定会话是否还活着。

这将需要始终访问会话存储。如果您使用数据库支持的会话,则会带来大量开销。如果您使用缓存支持的会话,这是可行的。

django 文档参考:https://docs.djangoproject.com/en/1.8/topics/http/sessions/