小编IRB*_*BMe的帖子

NHibernate会话管理?

首先,让我简要介绍一下这个场景.我正在编写一个简单的游戏,其中几乎所有工作都在服务器端完成,并且有一个瘦客户端供玩家访问.玩家登录或创建帐户,然后可以通过在网格中移动来与游戏交互.当他们进入一个小区时,他们应该被告知该小区中的其他玩家,同样地,该小区中的其他玩家将被告知该玩家进入该小区.可以进行许多其他的交互和操作,但是不值得详细介绍它们,因为它更加相同.当玩家退出然后重新登录或者如果服务器停机并重新启动时,所有游戏状态都应该持续存在,但是如果服务器崩溃,那么我是否会失去10分钟左右的更改并不重要.

我已经决定使用NHibernate和一个SQLite数据库了,所以我一直在阅读很多关于NHibernate的内容,按照教程和编写一些示例应用程序,我对如何应对这个问题感到非常困惑!

我的问题是:管理会话的最佳方式是什么?只是从我理解的少量,所有这些可能性跳出来对我:

  • 拥有一个始终打开的会话,所有客户端都使用该会话
  • 为每个连接并定期刷新它的客户端设置一个会话
  • 每次我必须使用任何持久化实体时打开一个会话,并在更新,插入,删除或查询完成后立即关闭它
  • 为每个客户端建立一个会话,但保持断开状态,只有在需要使用它时才重新连接
  • 与上面相同,但保持连接状态,只在一段时间不活动后断开连接
  • 保持实体分离,并且每隔10分钟仅附加一次,例如,提交更改

我可以使用什么样的策略来获得不错的性能,因为每秒可能有数百个客户端可能会有很多更新,插入,删除和查询,而且它们都必须相互一致?

另一个小问题:我应该如何以有效的方式使用交易?是否可以将每一次更改都放在自己的事务中,或者当我有数百个客户端都试图改变网格中的单元格时,这种情况会不会很糟糕?我是否应该尝试弄清楚如何将类似的更新批量放在一起并将它们放在一个事务中,还是会变得太复杂?我甚至需要大部分交易吗?

c# database nhibernate session transactions

8
推荐指数
1
解决办法
7179
查看次数

标签 统计

c# ×1

database ×1

nhibernate ×1

session ×1

transactions ×1