请在我犯下大错误之前阻止我:) - 我正在尝试为 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/