完整性检查 - 使用TCP(ServerSocket)的Java中的多人游戏服务器是否可行?

时间:2010-03-05 19:33:00

标签: java sockets tcp

在我犯大错之前请先阻止我:) - 我正在尝试为Android手机编写一个简单的多人游戏测验游戏,以获得编写服务器代码的经验。

我之前从未编写过服务器代码。

我有使用Java的经验,使用套接字对我来说似乎是最简单的选择。浏览器游戏意味着平台独立性,但我不知道如何利用从服务器到浏览器的Http来解决缺乏推送的问题。

游戏将如何发挥作用,它应该让我知道我需要什么;

用户启动App并使用Socket连接到我的服务器。 服务器等待4个玩家,将他们分组到一个游戏中,然后广播测验的第一个问题。 在所有玩家提交了他们的答案(或者已经过了5秒)之后,服务器会在下一个问题上分发正确的答案。

这是基础,你可以填写更精细的细节,它只是一个玩具项目。

我的问题是;

在服务器上使用简单的JAR处理客户端请求有什么缺陷?服务器代码在首次运行时注册ServerSocket并创建一个线程池来处理传入的客户端连接。是否存在通过双向通信实时连接到多个客户端的选项?

一个简单的例子是在底部的SUN tutorials中你可以看到多线程服务器的源代码,除了我最初有一个线程池来减少开销,我的服务器大致相同。

您希望这个系统能够处理多少个客户端?如果我们为每个客户端都有一个新线程,我可以看到它是一个限制,也是并发播放器的免费套接字数量。 Threads seem to top out at around 6500可用套接字的数量几乎是其中的十倍。

说实话,如果我的游戏可以处理20个并发的玩家,那就没事了,但我正在努力学习这种方法本来就是愚蠢的。关于设置简单的国际象棋服务器或其他东西的任何文章都会很棒,我找不到任何文章。

先谢谢知识渊博的人,

GAV株系

3 个答案:

答案 0 :(得分:2)

使用Java服务器可以处理20个并发玩家。确保你做的最重要的事情是避免任何类型的阻止UI,就像魔鬼本身一样。

作为奖励,如果您坚持使用非阻塞I / O,您可以完成整个单线程。

根据每个用户在客户端上的负载量,可能需要将大约100个用户扩展到多个进程/服务器。

答案 1 :(得分:1)

只要您正确编码,它应该能够毫无问题地完成。

Project Darkstar

答案 2 :(得分:0)

您可以使用Long Poll方法解决“从服务器到客户端的HTTP推送”问题。

但是,使用TCP套接字也可以。很多游戏都是用这种方式写的。