问题 服务器编程 - 简单的多人游戏 - 哪种协议和技术?


我有一年的编写客户端代码的经验,但没有服务器的东西。我想稍微限制一下这个问题所以我会简化我想要实现的目标。

我想编写服务器代码,以便两个客户端(浏览器或iPhone / Android)可以连接,当两个玩家连接时,他们会看到计时器数量减少到零。时钟将在服务器上同步,客户端将是唯一可识别的。

这里的问题是连接这个词,人们在多人游戏中使用了什么?打开TCP套接字进行双向通信?你可以说我不确定我在说什么。我希望使用AppEngine,但我不确定它是否适合它的请求。

我有一些Java的经验,虽然Erlang听起来像是最好的选择,但我只是想玩这个并快速推出,所以Java会更容易。我只需要知道连接玩家的最佳方式等。

谢谢,

GAV


3481
2018-03-04 13:32


起源



答案:


我建议我们将桌面和移动系统视为平等客户。那么有什么选择呢?

  • 您编写了一个接受来自客户端的连接的套接字服务器。但是你需要编写一些套接字客户端,甚至是2x - 用于桌面和移动操作系统。用户必须安装此客户端。

  • 您启动Web服务器(您喜欢的任何技术)。它将公开一些Web服务,这些服务对桌面和客户端操作系统同样可访问。但是你仍然需要编写一个客户端应用程序(再次2x)。

  • 您运行Web服务器并通过标准HTTP协议访问所有功能。这样您甚至不需要客户端 - 几乎每个桌面或移动操作系统至少安装了一些Web浏览器。 JavaScript将为您的股票代码提供动态更新。


7
2018-03-04 13:46



感谢一个模糊问题的良好答案 - 套接字编程最适用于我想要实现的结果,你的答案给了我关键词来做更多的研究。 - gav
在这种情况下,Javascript可以而且应该被视为与其他客户端一样的客户端。 - Ismael Abreu


答案:


我建议我们将桌面和移动系统视为平等客户。那么有什么选择呢?

  • 您编写了一个接受来自客户端的连接的套接字服务器。但是你需要编写一些套接字客户端,甚至是2x - 用于桌面和移动操作系统。用户必须安装此客户端。

  • 您启动Web服务器(您喜欢的任何技术)。它将公开一些Web服务,这些服务对桌面和客户端操作系统同样可访问。但是你仍然需要编写一个客户端应用程序(再次2x)。

  • 您运行Web服务器并通过标准HTTP协议访问所有功能。这样您甚至不需要客户端 - 几乎每个桌面或移动操作系统至少安装了一些Web浏览器。 JavaScript将为您的股票代码提供动态更新。


7
2018-03-04 13:46



感谢一个模糊问题的良好答案 - 套接字编程最适用于我想要实现的结果,你的答案给了我关键词来做更多的研究。 - gav
在这种情况下,Javascript可以而且应该被视为与其他客户端一样的客户端。 - Ismael Abreu


有一系列很好的文章 游戏程序员的网络 由那些以此为生的人。


6
2018-03-04 23:45





我绝不是网络通信专家,但如果你不介意丢失一些数据包(或软件中的错误检查),你想要快速,精益的沟通,你可以使用 UDP。我认为大多数时间敏感的数据程序和流媒体使用此协议来避免延迟并保持数据包大小不变。


1
2018-03-04 13:47





几年前我用java和ServerSocket实现了一个Client / Server应用程序(http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html)。您还有一个SSL版本。

因此,您创建一个ServerSocket并等待连接。连接客户端时,您将创建一个线程,该线程将使用您创建的协议与此客户端进行讨论。

http://www.developer.com/java/ent/article.php/1356891/A-PatternFramework-for-ClientServer-Programming-in-Java.htm

如果找到这个小框架:

http://www.bablokb.de/jcs/jcs.html

最困难的事情之一是创建你的协议,学习如何创建一个的好方法是了解如何工作FTP(或HTTP ...)。


1
2018-03-04 14:00





你是正确的,J2EE模型会因近乎实时或多玩家的需求而崩溃。你想迁移想要考虑RedDwarf游戏服务器项目。它适用于Servlets为业务逻辑做的游戏,并且是开源的。

http://www.reddwarfserver.org

我建议我们考虑桌面和移动   系统作为平等客户。有什么选择   那么呢?

RedDwarf有一个可插拔的trabsport层,可以支持你想要的任何类型的客户端。

Web服务器非常适合Web类型的应用程序。如果你的游戏就像一个网页 - 不是多用户,是基于回合,而且进展非常缓慢 - 那么一个网络服务器就是一个很好的选择。

但是,如果没有,你需要一些技术更强大的东西。

哦,为了它的价值,你做什么,如果你想从头开始编写服务器,那么不要使用“ServerSocket”。这需要每个连接一个线程,永远不会扩展。使用NIO或使用像Netty这样的NIO framewoprk。


1
2018-01-16 18:32



链接已死,这是github链接: github.com/reddwarf-nextgen/reddwarf - Rosdi Kasim