2011-10-31 42 views
-1

所以我正在写一个基于游戏室,一般聊天等大堂视图的国际象棋比赛制度。到目前为止,我有一个工作原型,但我对一些事情有很大的怀疑与服务器做了。编写游戏大厅服务器对我来说是一种新的编程体验,所以我没有一个清晰而精确的编程模型。我也找不到描述它应该如何工作的论文。我从亚马逊订购了“Java网络编程第三版”,并仍在等待发货,希望本书能找到一些有用的示例/信息。Java-如何写一个大厅游戏服务器

同时,我想收集您的意见,看看您将如何处理一些事情,以便我可以学习如何正确编写服务器。以下是我头顶的几个问题:(可能会更多)

首先,让我们定义服务器的功能。它的主要功能是与客户端保持TCP连接,倾听他们产生的事件并将它们发送给其他玩家。但除此之外还有更多吗?

我应该为每个客户端使用一个线程吗?如果是这样,300个客户端= 300个线程。这不是太多吗?需要哪些硬件来支持?大厅消耗的带宽有多大?

应该使用什么样的数据结构来保存客户端的套接字?在迭代时如何保护它免受并发修改(例如,玩家进入或存在大厅),以便在不影响吞吐量的情况下调度事件? ConcurrentHashMap是这里的正确答案,还是有一些我应该知道的技巧?

当用户进入大厅时,您将使用什么机制将大厅的状态转移给他?在发生这种情况的同时,其他事件还会从哪里冒出来?

输入是非常感谢。谢谢!

截图:http://goo.gl/pYqM3

回答

-1

首先要注意的事情是,没有唯一正确的答案。有一百万种不同的和完全有效的方式来卷起这样的东西。

预先考虑设计的各个方面很好,但要小心,试图在前期设计过多关于您的设计的事情会使您放慢速度,导致可能不是最好的设计。原因是,不再有多久,你一开始就觉得困难,你不知道你会遇到什么问题,直到你打到他们

如果你从头开始做这个,我强烈建议申请test-driven development,这需要这种方法来设计软件:

  1. 选择一个小的功能,未来实现
  2. 失败测试用例只有当功能正确实施时才会通过
  3. 写出可能的最小数量的代码以使测试通过
  4. 转到步骤1

强制所有新代码立即执行,确保您尽快遇到问题。您最终还会得到一套自动化测试,确保您在任何时候都拥有一个工作系统。

将这个应用几个周期后,您已经看到设计开始出现。在短周期内做这件事也让你有机会频繁地评估下一个最重要的特性,而不是兔子,追踪几天不太重要的特性的细节。

关于TDD的文献很多。我建议检查一些这些了:

+0

感谢您的答复,但我不问问题为时过早;我已经有了一个工作原型。就测试而言,只要我能做到。问题是我需要实际的并发连接和用户做各种事情。我怎样才能做到这一点..? – user1021269