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

标签 java sockets tcp

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

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

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

这就是游戏的玩法,它应该可以让我了解我的需求;

用户启动应用程序并使用套接字连接到我的服务器。 服务器等待 4 名玩家,将他们分组进行游戏,然后广播测验的第一个问题。 当所有玩家提交答案后(或经过 5 秒),服务器将正确答案与下一个问题一起分发。

这就是基础知识,您可以填写更详细的细节,这实际上只是一个玩具项目。

我的问题是;

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

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

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

说实话,如果我的游戏可以处理 20 个并发玩家,那就太好了,但我正在尝试了解这种方法是否本质上是愚蠢的。任何有关设置简单的国际象棋服务器或其他内容的文章都会很棒,但我找不到。

先谢谢各位知情人士了,

加夫

最佳答案

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

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

扩展超过 100 个用户左右可能需要进入多个进程/服务器,具体取决于每个用户给客户端带来的负载量。

关于java - 健全性检查 - 使用 TCP (ServerSocket) 的 Java 多人游戏服务器是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2389415/

相关文章:

java - java中可以同时使用fork/join和executor服务吗?

multithreading - UDP 服务器应该如何回复它的客户端?

python - 使用队列的 Asyncio 持久客户端协议(protocol)类

java - 如何从命令行对目录中的所有文件运行 Java 程序

java - 使用参数化方法进行 JUnit 测试

c- 套接字上的 HTTP 服务器无法正确显示图像

python - 如果 TCP 客户端能够暂停服务器,当 TCP 服务器读取非阻塞套接字时

embedded - 保证 TCP 数据包大小

c# - 无法通过TCP将数据android发送到pc

java - 如何使用 Apache HTTPClient 的 post 方法将 List 发送到服务器