【发布时间】:2017-11-29 18:09:44
【问题描述】:
我正在用 Java 制作一个实时多人游戏服务器。我将内存中匹配的所有数据存储在带有“匹配”对象的 HashMap 中。每个比赛对象都包含有关所有玩家的游戏和游戏状态的信息(一场比赛中的 2-5 人)。服务器将为每个用户的连接传递相同的匹配对象到服务器。
我有点担心的是让这个线程安全。可以连接到服务器中的不同线程,所有这些线程都需要访问相同的匹配项。
问题是对象中会有很多变量/列表,所有这些都需要同步。其中一些可能需要用于执行相互影响的计算,这意味着我需要嵌套的同步块,这是我不想要的。
匹配对象中每个变量的同步块是我唯一的解决方案,还是我可以做其他事情?
我知道 SQLite 有内存模式,但我发现的问题是:
引自他们的网站:
SQLite 支持无限数量的同时读取器,但它在任何时刻只允许一个写入器。对于许多情况,这不是问题。作家排队。每个应用程序都快速完成其数据库工作并继续运行,并且没有任何锁定持续超过几十毫秒。但是有些应用程序需要更多的并发性,这些应用程序可能需要寻求不同的解决方案
几十毫秒?那是很长一段时间。这是否足够快,或者是否有另一个适合实时游戏的内存数据库?
【问题讨论】:
标签: java multithreading sqlite multiplayer