¿Gestión de la sesión de NHibernate?

En primer lugar, permítanme dar una breve descripción del escenario. Estoy escribiendo un juego simple en el que casi todo el trabajo se realiza en el lado del servidor con un cliente ligero para que los jugadores puedan acceder a él. Un jugador inicia sesión o crea una cuenta y luego puede interactuar con el juego moviéndose alrededor de una cuadrícula. Cuando ingresan a una celda, se les debe informar de otros jugadores en esa celda y, de manera similar, a otros jugadores de esa celda se les informará que ese jugador ingresó. Hay muchas otras interacciones y acciones que pueden tener lugar, pero no vale la pena detallarlas ya que es más de lo mismo. Cuando un jugador cierra la sesión, vuelve a entrar o si el servidor se apaga y vuelve a funcionar, todo el estado del juego debería persistir, aunque si el servidor falla, no importa si pierdo aproximadamente 10 minutos de cambios.

Decidí usar NHibernate y una base de datos SQLite, así que he estado leyendo mucho sobre NHibernate, siguiendo tutoriales y escribiendo algunas aplicaciones de muestra, ¡y estoy completamente confundido en cuanto a cómo debo hacer esto!

La pregunta que tengo es: ¿cuál es la mejor manera de gestionar mis sesiones? Solo por la pequeña cantidad que entiendo, todas estas posibilidades saltan a la vista:

Tenga una sesión única que siempre esté abierta y que todos los clientes usen.Tenga una sola sesión para cada cliente que se conecte y limpie periódicamenteAbra una sesión cada vez que tenga que usar cualquiera de las entidades persistentes y ciérrela tan pronto como se complete la actualización, inserción, eliminación o consultaTenga una sesión para cada cliente, pero manténgala desconectada y solo reconéctela cuando necesite usarlaIgual que el anterior, pero manténgalo conectado y desconéctelo solo después de un cierto período de inactividadMantenga las entidades separadas y solo adjúntelas cada 10 minutos, por ejemplo, para confirmar los cambios.

¿Qué tipo de estrategia debo usar para obtener un rendimiento decente dado que podría haber muchas actualizaciones, inserciones, eliminaciones y consultas por segundo de posiblemente cientos de clientes a la vez, y todas deben ser coherentes entre sí?

Otra pregunta más pequeña: ¿cómo debo usar las transacciones de manera eficiente? ¿Está bien que cada cambio sea en su propia transacción, o va a tener un mal desempeño cuando cientos de clientes intenten alterar las celdas en la cuadrícula? ¿Debo intentar averiguar cómo agrupar actualizaciones similares y colocarlas en una sola transacción, o será demasiado complicado? ¿Incluso necesito transacciones para la mayoría de ellos?

Respuestas a la pregunta(4)

Su respuesta a la pregunta