如何编写大厅游戏服务器



所以我正在编写一个基于带有游戏室,一般聊天等的大厅视图的象棋配对系统。到目前为止,我有一个工作原型,但我对我在服务器上做的一些事情有很大的怀疑。编写游戏大厅服务器对我来说是一种全新的编程体验,所以我没有一个清晰而精确的编程模型。我也找不到一篇描述它应该如何工作的论文。我从亚马逊订购了《Java网络编程第3版》,还在等待发货,希望我能在这本书中找到一些有用的例子/信息。

同时,我想收集你的意见,看看你会如何处理一些事情,这样我就可以学习如何正确地编写一个服务器。以下是我脑海中浮现的几个问题:(可能还会有更多)

首先,让我们定义服务器的功能。它的主要功能是保持与客户端的TCP连接,监听它们生成的事件并将它们分发给其他播放器。但还有其他原因吗?

每个客户端应该使用一个线程吗?如果是这样,300个客户端= 300个线程。是不是太多了?需要什么硬件来支持?那么一个大厅大概要消耗多少带宽呢?

应该使用什么样的数据结构来保存客户端的套接字?如何保护它免受并发修改(例如:当玩家进入或存在大厅时,迭代通过它来调度事件而不损害吞吐量?ConcurrentHashMap是正确的答案吗,还是有一些我应该知道的技术?

当用户进入大厅时,您将使用什么机制将大厅的状态传递给他?当这一切发生时,其他事件又在哪里出现呢?

非常感谢输入。谢谢!

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

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

提前考虑设计的各个方面是件好事,但要注意,试图提前决定太多的事情会减慢你的设计速度,并导致可能不是最好的设计。原因是,一开始你不再花多少时间和精力去思考,你不知道你会遇到什么问题,直到你遇到它们

如果您从头开始,我强烈建议您应用测试驱动开发,它采用以下方法来设计软件:

  1. 选择一个小功能来实现下一个
  2. 写一个失败的测试用例,只有当功能被正确实现时才会通过
  3. 编写尽可能少的代码以使测试通过
  4. 转到步骤1

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

在应用了几个周期后,你会看到设计开始浮现。在较短的周期内做这件事还能让你有机会经常评估下一个最重要的特性是什么,而不是花几天时间在一个不那么重要的特性的细节上。

有很多关于TDD的文献。我建议你看看其中的一些:

  • 我同情不写单元测试的傻瓜
  • 编写优秀的单元测试:最佳和最差实践
  • JUnit测试感染:程序员爱写测试

最新更新