小编Wha*_*mes的帖子

Java大型多人游戏服务器可扩展性

我为Android创建了一款名为The Infinite Black的大型多人在线游戏:https: //market.android.com/details?id = theinfiniteblack.client

在我天真的时候,我预计每月约有1,000名玩家的适度增长率,并且需要管理大约20个实时TCP/IP客户端.

该游戏出乎意料地爆炸性增长,一周内有超过40,000名新用户,并且一次平均有大约300个实时连接,并呈指数级增长.

服务器体系结构包括每个连接2个线程(阻塞读/写),一个ServerSocket线程产生新客户端,以及一个控制器线程,用于轮询每个客户端以获取新操作,将其应用于游戏世界,然后在将数据刷新时将数据刷回完成.

服务器是用Java构建的,我不是很精通,特别是在像这样的高压力情况下.在内存和线程管理方面,C#真的让我很烦恼.

为了达到目的......我刚刚订购了两个非常强大的系统作为专用游戏服务器运行,并希望最大限度地利用资源.有关Java资源配置的大量信息已被证明具有误导性,不正确或过时.

我目前使用-Xss512k作为我的启动参数,并且理解这决定了每个线程的堆栈大小分配,但我不完全理解它可能带来的所有内容.有什么工具或方法可以告诉我,如果我超出标记并可以缩小它?我应该考虑哪些其他命令行参数?

新服务器拥有16GB的RAM和i7-2600K Sandy Bridge 3.4GHz处理器:配置中有哪些选项可以尽可能地利用这一优势?我的目标是每台服务器一次1,200个在线客户端(2,400个线程).

我应该关注哪些意想不到的陷阱和问题?

我已经阅读了关于最大线程数的极其矛盾的故事:如果我试图推动2,400个活动线程,事情会崩溃吗?

Java似乎不是为这类任务而设计的.我应该考虑将服务器迁移到另一种语言吗?

我目前在Eclipse中运行调试模式的服务器,而它正在开发中(呃..)

这是我的Eclipse .ini配置:

--launcher.XXMaxPermSize 256M

-Xms256m

-Xmx1024m

java concurrency multithreading garbage-collection tcp

10
推荐指数
2
解决办法
7888
查看次数