【问题标题】:Developing a Multiplayer Browser-Based Card Game With HTML/JS/AJAX/Java使用 HTML/JS/AJAX/Java 开发基于浏览器的多人纸牌游戏
【发布时间】:2012-11-05 17:33:56
【问题描述】:

我目前有一个用 Java 开发和运行的多人纸牌游戏,它正在控制台中运行。该游戏的格式类似于桥牌和黑桃,但没有竞标过程。这是一个四人游戏,玩家轮流玩牌。

我目前正在努力将其转换为基于浏览器的 web 应用程序,并添加 Spring MVC,并使用 HTML、JavaScript 和 AJAX 进行 UI 和与后端的通信。我有一个很好的想法,我想让它在单人游戏中对抗 AI,允许用户打牌并使用 AJAX 调用从服务器获取接下来的三场比赛。

但是,我想知道我需要采取什么样的方法才能让它成为多人游戏。我看到了一些我不熟悉的对“套接字编程”的引用,但这些似乎围绕 Java 小程序,而不是基于浏览器的应用程序。

基本上,我正在寻找一种方法来确保当用户开始游戏并且其他人加入时,我如何确保他们连接到同一个游戏并且能够看到彼此的游戏?我现在在为单人游戏完全开发 UI 之前问这个问题,因为我想避免完全重新设计以支持多人游戏功能。

【问题讨论】:

  • 您可以使用long polling,但根据您的服务器结构,这可能不是最佳解决方案。或者,您可以让每个客户端的脚本重复调用服务器以查找新数据。理论上,您会希望每个玩家都拥有与调用服务器相同的“sessionID”。显然,您希望对此进行哈希处理。

标签: java javascript jquery


【解决方案1】:

由于您要创建多人游戏,因此您需要至少有一台服务器供您的客户端连接。由于您希望基于此浏览器,您很可能需要自己的服务器(而不是让其中一个客户端成为服务器)。当用户加入游戏时,它会登录到该用户所在的服务器上。当玩家执行动作时,服务器会处理该动作,然后向连接到该房间的每个其他客户端发送通知。此时客户端 UI 会更新。

在过去,您无法使用纯 HTML / JavaScript 执行此操作,因为您无法打开套接字。这意味着,服务器无法通知客户端。但是在 HTML5 中,您应该能够使用 WebSockets 来实现您在中间使用服务器所做的事情。 The WebSocket API

但是,如果您不想使用 HTML5 WebSockets,还有另一种在 JavaScript 中模仿 Sockets 的技术。也就是说,服务器可以与客户端对话。这种技术称为长轮询。客户端向服务器发送请求更新,如果没有可用的更新,服务器会保留该请求,直到有可用的更新,然后将其发送回客户端,此时他们发出另一个更新请求。 Simple Long Polling Example

另一种选择,如果您对 Java 非常熟悉,不妨查看Google Web Toolkit。 GWT 是 Java 的一个子集,它被编译为前端的 HTML 和 JavaScript,如果需要,可以创建一个服务器端 java 可执行文件,您可以将其与 TomCat 或其他 Web 服务一起使用。在此选项中,您有一些库允许您编写将编译为长轮询 JavaScript 的套接字样式代码。

祝你好运!

【讨论】:

  • 感谢您提供非常丰富的答案。我想我会选择 WebSocket 选项,因为看起来 IE10 将加入聚会,并且找到了一些很好的教程来帮助实现这一点。我的最后一点困惑是关于保持游戏正常。我想我会让服务器维护一系列游戏对象(我已经创建了)。我将向我的 Game 对象添加一个“gameId”数据成员,并在与 UI 之间的每个请求中发送/接收此 ID。这听起来像是一种可行/有效的方法吗?
  • 我建议使用每个游戏唯一的 hashed gameSessionID 以及从 gameSessionID 到 Games 的并发安全映射。由于您有多个用户与服务器交谈,因此并发性将很重要。请务必阅读如何安全地执行此操作。既然熟悉Java,不妨从这里入手:Lesson: Concurrency
  • 长轮询比 websockets 好。我讨厌 websockets
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多