0

我正在使用 Rails 创建一个在线多人棋盘游戏,我希望无需手动刷新页面即可玩游戏。我打算使用 websockets 或服务器发送事件来更新页面。我还没有决定哪个,但我不希望它会对我的问题产生影响。

我感到困惑的是知道何时向客户端发送更新。例如,假设我正在下国际象棋,玩家 1 转了一圈。他们会将他们的移动发送到服务器,然后服务器会将其保存到数据库中。player2 的 websocket 或 SSE 如何知道将有关 player1 移动的信息推送到 player2 的浏览器?

我知道他们可以定期查询数据库以查看游戏是否已更新,但这似乎很难扩展,因为每个用户都会经常查询数据库。

有没有一种简单的方法可以等待数据库更新并以某种方式自动收到通知?还是有其他解决方案?

我已经在网上寻找了很多解决方案,但还没有真正得到任何具体的想法。只要它是免费的,我绝对愿意使用图书馆或其他任何东西来解决问题。我见过一些付费解决方案,但这些都不是一种选择。

我还看到有人建议以某种方式使用 node.js 和 rails 来实时做一些事情。我对 node.js 了解不多,但我听说它对这样的异步功能很有用。如果它比任何 Rails 解决方案都好,我有兴趣学习如何使用它。

我正在使用 Rails 3.2,但如果 R​​ails 4 有一些在这里可以很好地工作,我可能也会对此感兴趣。

4

2 回答 2

2

正如 nik 建议的那样,如果您是 ruby​​ 开发人员,请使用 FAYE Ruby Server。

就事情如何联系在一起而言:

  1. 每场比赛都是一个频道
  2. 每个玩家订阅这个频道
  3. 当玩家移动时,移动被发送到服务器
  4. 服务器将针对游戏的移动保存在数据库中
  5. 服务器向通道发送消息。
  6. 两位玩家的用户界面都随着新动作而更新。

此设置使您可以轻松地重玩整个游戏或从中断的地方继续。只需从 db 获取所有动作并将它们发送到新频道即可。这可能不是高性能的,但它应该可以工作。

于 2013-05-13T10:10:19.290 回答
0

你也可以使用FAYE,它有 Ruby Server 和 Node.js server,你可以选择一个

于 2013-05-13T08:15:16.300 回答