1

我正在开发多人游戏,我有一个写在asp.net. 游戏用户向服务器发送请求以寻找对手并加入某种战斗。战斗请求可以有一些参数,但也可能没有(估计是最流行的场景),所以发送方应该连接到任何已经发送过请求的用户并等待连接。

将所有等待请求存储在线程安全集合中是个好主意吗?它总是会包含相当多的元素(因为很快就可以找到战斗的匹配项),但是,很多线程会尝试一次访问这个集合。为每个N请求创建不同的集合是个好主意吗?的最佳尺寸是N多少?或者也许还有其他想法?我的关键问题是在不损害服务器性能的情况下快速找到匹配项,即使当前连接的数量非常大。

UPD

看来我没有很清楚地描述我的问题。所有战斗信息——参与用户、战斗中的动作、获胜者等,都存储在数据库中。我需要的是处理加入战斗的请求(请求可能只包含发送者 ID 和战斗过滤器)。一般情况下,对手会很快找到,所以不需要存储请求数据(找到比赛后应该删除,所有战斗数据都会存储在数据库中),但是,我必须准备好处理大量的同时提出要求。

4

1 回答 1

1

如果不考虑匹配玩家的标准,则在编写 Web 应用程序时不应将用户会话数据保存在内存中。您的 Web 应用程序有时会被回收,从而导致数据丢失。

正如 SLaks 所说,您应该将这些数据存储在数据库中并从中进行选择。您应该从这个基线考虑性能优化,具体取决于用户匹配逻辑。要么选择前 n 个用户,要么根据所需条件创建查询。

于 2012-11-04T22:46:19.493 回答