所以我正在写一个基于大厅视图的国际象棋配对系统,包括游戏室,一般聊天等。到目前为止,我有一个工作原型,但我对我对服务器所做的一些事情有很大疑虑。编写游戏大厅服务器对我来说是一种全新的编程体验,因此我没有明确的编程模型。我也找不到描述它应该如何工作的论文。我从亚马逊订购了“Java网络编程第3版”并仍在等待发货,希望我能在本书中找到一些有用的示例/信息。
与此同时,我想收集你的意见,看看你将如何处理一些事情,这样我就可以学习如何正确地编写服务器。以下是我头脑中的几个问题:(可能会有更多的问题)
首先,让我们定义服务器的功能。它的主要功能是与客户端保持TCP连接,监听它们生成的事件并将它们分发给其他玩家。但是还有更多吗?
我应该为每个客户端使用一个线程吗?如果是这样,300个客户端= 300个线程。那不是太多了吗?需要什么硬件来支持它?大厅消耗的带宽大约是多少?
应该使用什么样的数据结构来保存客户端套接字?你如何保护它免受并发修改(例如,玩家进入或存在大厅)在迭代它以发送事件而不损害吞吐量? ConcurrentHashMap在这里是正确答案,还是我应该知道一些技巧?
当用户进入大厅时,您会使用什么机制将大厅的状态转移给他?虽然这种情况正在发生,其他事件会在哪里冒泡?
非常感谢输入。谢谢!
屏幕截图:http://goo.gl/pYqM3
答案 0 :(得分:-1)
首先要注意的是没有单一的正确答案。有一百万种不同的,完全有效的方法来卷起这样的东西。
预先考虑设计的各个方面是件好事,但要注意尝试预先设计太多关于你设计的东西会减慢你的速度并导致可能不是最好的设计。原因是你不再开始思考多久和多久,你不知道在击中它们之前会遇到什么问题。
如果您是从头开始这样做,我强烈建议您应用test-driven development,这会采用这种方法来设计软件:
强制立即行使所有新代码,确保您尽快遇到问题。您最终还会获得一套自动化测试,以确保您随时都可以使用工作系统。
在应用了几个周期后,您已经看到设计开始出现了。在短周期内完成这项工作还可以让您有机会经常评估下一个最重要的功能,而不是兔子 - 在数天内跟踪一个不那么重要的功能的细节。
有很多关于TDD的文献。我建议检查一下这些: