Java 多人游戏客户端/服务器体系结构RMI/JMS/Sockets
我正在用Java编写一个基于回合的纸牌游戏,但需要一些关于多人游戏的建议。玩家可以创建一个多人游戏,然后其他人可以加入该游戏,轮流玩他们的移动。我花了数小时研究了各种不同的方法来实现这一点,但如果有人帮忙,我真的可以做到。我将列出这些要求以及迄今为止我发现的情况:Java 多人游戏客户端/服务器体系结构RMI/JMS/Sockets,java,networking,rmi,Java,Networking,Rmi,我正在用Java编写一个基于回合的纸牌游戏,但需要一些关于多人游戏的建议。玩家可以创建一个多人游戏,然后其他人可以加入该游戏,轮流玩他们的移动。我花了数小时研究了各种不同的方法来实现这一点,但如果有人帮忙,我真的可以做到。我将列出这些要求以及迄今为止我发现的情况: 这完全是一个Java游戏,因此使用类似RMI的东西并不是一个问题 玩家移动,此移动发送到服务器,服务器将此移动发送到游戏中的其他玩家(客户端) 服务器需要存储所有正在进行的游戏以及其中的玩家(目前使用HashMap) 到目前为止,
- 这完全是一个Java游戏,因此使用类似RMI的东西并不是一个问题
- 玩家移动,此移动发送到服务器,服务器将此移动发送到游戏中的其他玩家(客户端)
- 服务器需要存储所有正在进行的游戏以及其中的玩家(目前使用
)HashMap
+
处理多线程和对hashmap的访问
-
必须轮询服务器,查看玩家是否已移动,或者使用无法通过防火墙工作的回调
插座:
+
允许异步回调(?)
-
无法轻松从生成的多个线程访问hashmap(?)
-
比RMI更复杂
我还研究了JMS、JINI/JavaSpaces、JGroups和其他我能找到的东西,但我不知道哪一个最适合。我已经启动并运行了RMI的客户机->服务器部分,但是服务器->客户机似乎是不可能的,因为轮询是如此低效和不可扩展
我非常感谢你的任何建议
非常感谢
编辑:我发现了ConcurrentHashMap,我认为它解决了我的一个问题。第二人生的创作者已经在线发布了他们的消息基础架构讨论结果,其中包含一个消息解决方案列表,并对其优缺点进行了评论: (Second Life Wiki)您考虑过吗?它支持分布式集合和其他数据结构。对于游戏来说,我确信它足够可靠 ■分布式java.util.{Queue,Set,List,Map} ■分布式java.util.concurrency.locks.Lock ■分布式java.util.concurrent.ExecutorService ■一对多映射的分布式多映射 ■发布/订阅消息的分布式主题 ■分布式索引和查询支持 ■通过JCA实现事务支持和J2EE容器集成 ■安全集群的套接字级加密 ■针对映射的直写和隐藏持久性 ■用于远程访问集群的Java客户端 ■动态HTTP会话群集 ■支持群集信息和成员资格事件 ■动态发现 ■动态缩放 ■带备份的动态分区 ■动态故障转移
■基于Web的群集监控工具请看。它提取了套接字的大部分开销,还允许同步和异步消息。可以将其视为RMI和套接字之间的中间地带。感谢您的回复。不过,我不认为这是一个分布式计算问题-我只打算玩一个游戏服务器,然后是位于任意位置的多个客户端,在此服务器之间来回传递消息。如果我对Hazelcast的理解有误(我对此做了一些阅读),则表示歉意,但我不知道如何将其应用于此?谢谢,我直到现在才意识到这一点