Un enfoque podría ser:
se crea un middleware que hace lo siguiente en process_response:
- de verificación de una cookie denominada 'en línea', pero sólo si el usuario es autenticado
- si la cookie no está allí,
- establecer una cookie llamados 'en línea' con el valor '1'
- establecer el lifesp una de la cookie a 10 minutos
- actualización del campo 'last_login' de auth.user para este usuario con la fecha y hora actuales
ahora que ha iniciado sesión actualmente en todos los usuarios de la tabla auth.user . Todos los usuarios que tienen un last_login más nuevo que datetime.now() - interval (15 minutos) pueden considerarse "en línea".
La base de datos se escribirá para cada usuario conectado aproximadamente cada 10 minutos. Ajuste los valores "10" y "15" según sus necesidades.
La ventaja aquí es que las escrituras de la base de datos son raras (de acuerdo con sus dos configuraciones numéricas 10/15). Y para la optimización de velocidad, asegúrese de que last_login esté indexado, por lo que un filtro en este campo, incluido Count, es realmente rápido.
Espero que esto ayude.
Entonces, ¿cómo resultó para usted? Me interesaría tu propia solución ... – mawimawi