- 这是一款完全由Java开发的游戏,因此使用类似RMI的东西不是问题
- 玩家进行操作后,将此操作发送到服务器,服务器会将此操作发送给游戏中的其他玩家(客户端)
- 服务器需要存储所有进行中的游戏及其中的玩家(目前正在使用
HashMap<UniqueGameID, GameObject>
来实现)
我迄今为止已经尝试了套接字和RMI,并且发现:
RMI:
+
处理多线程和对哈希图的访问
-
要么必须轮询服务器以查看玩家是否已经移动,要么使用回调功能,但回调无法通过防火墙工作
套接字:
+
允许异步回调(?)
-
无法轻松地从生成的多个线程中访问哈希图(?)
-
比RMI更复杂
我还研究了JMS、JINI/JavaSpaces、JGroups以及其他任何我能找到的东西,但我不知道哪一个最好。我已经成功实现了RMI的客户端-服务器部分,但似乎无法实现服务器-客户端,因为轮询效率低下且难以扩展。
非常感谢您的任何建议。
谢谢!
编辑:我后来发现ConcurrentHashMap可以解决我的一些问题。