选择 Ruby on Rails 作为基于浏览器的在线游戏的平台

Posted

技术标签:

【中文标题】选择 Ruby on Rails 作为基于浏览器的在线游戏的平台【英文标题】:Choosing Ruby on Rails as platform for an browser based online game 【发布时间】:2011-06-07 20:11:26 【问题描述】:

对于类似于 Travian 的在线策略游戏,我有一些(我认为)非常棒的想法。有些内容我还没有弄清楚,还有一些其他的挑战我还不知道。

这是一个相当大的项目,对于一个还不是熟练的网络开发人员的人来说可能太重了。我仍然想试一试,但我在选择平台时遇到了麻烦。最近世界“尺度”被抛出了很多,我看到 Ruby on Rails 被抨击,因为它不能很好地扩展,所以我来这里是为了得到一些答案。

我喜欢 Ruby on Rails,包括 Ruby 和 Rails。我当然不是这方面的专家,但我喜欢使用它。我之前也使用过 Python + Django,也使用过 php(我不喜欢)。

理想情况下,比方说,每台服务器有 7000 名玩家,大概每秒要处理大量数据。 RoR 仍然是一个可行的平台吗?

如果这个问题含糊不清,我很抱歉,我想我正在寻找“RoR 很好,去吧!”种答案。您想添加的任何内容都可以。

谢谢!

【问题讨论】:

我认为您应该先尝试让 7000 人玩您的游戏,然后再担心可扩展性。 当然是榆树。我认为“理想”这个词意味着我假设这将是一五年后的成功游戏。 ;) @elmt 我同意“以后担心可扩展性”,但这仍然是一个有效的问题。 【参考方案1】:

我认为 Ruby on Rails 是满足您需求的不错选择。实际上,我们最近为在线游戏锦标赛创建了一个平台,玩家和他们的游戏机器人正在玩逻辑游戏。

我们在后端使用 Ruby on Rails 和 Sidekiq,在前端使用 ReactJS 和 WebSocket。它适用于相当多的玩家。这是基于我们在构建它时所学的教程:How to Write a Game Engine Using Ruby on Rails

【讨论】:

【参考方案2】:

这是一个不可能回答的问题,因为为了知道 rails 是否适合您想要做的事情,我们需要更多地了解您正在尝试做的事情。在没有信息的情况下,我能给出的最佳建议是让您查看railslab scaling videos,以便自己解决。

【讨论】:

【参考方案3】:

在 Rails 中构建它,在 Heroku.com 上托管它——工作完成。几乎无限扩展,您不必担心它是如何工作的(它只是这样做),它托管了许多高流量的 Facebook 应用程序,因此可以处理它。

【讨论】:

不错。不知道 Heroku。 我知道 Heroku,但我从未想过将我的应用程序托管在那里。感谢您的提示。 作为一个没有太多可扩展性经验的新开发者,你会发现你的瓶颈来自于你自己的代码:冗余请求,在你不需要的时候将模型加载到内存中,忘记 add_index 等。当你获得更多经验时,它们是你学会重构的东西。一旦拥有大量用户,数据库 IO 就会成为下一个瓶颈,无论您使用什么框架,这都是一个问题。我也推荐 Heroku。外包您的扩展,以便您可以将时间用于开发。您甚至可以自动缩放:github.com/ddollar/heroku-autoscale【参考方案4】:

所以如果我是你,我会研究像 node.js 这样的非阻塞服务器,因为它们更适合长时间保持许多连接打开,而这正是游戏需要做的,相比之下到传统的网络服务器。

这么说

在扩展 Web 应用程序时,需要担心 3 件主要的事情;内存、执行速度和 io(硬盘和网络)按此顺序排列。

就记忆而言,事情比以前好多了。 Phusion Passenger 使用写入时复制来分叉其工作人员,因此 rails 环境将在给定切片上的所有工作人员之间共享,这非常重要。与“黑暗时代”相比,ruby 管理内存的方式也有了巨大的改进,如果你使用的是 1.8.7,那么你想使用组成 Ruby Enterprise Edition 的补丁(区别就像白天和黑夜一样) . 1.9.x 几乎完全重写了运行时,所以如果您使用它,ruby 已经解决了内存问题。

对于执行速度,1.8.7 通常“足够快”(至少在调整垃圾收集设置之后)。 1.9.2 实际上与 python 的速度差不多,这使它比解释语言更快。这一点的重要性完全取决于您的应用程序的性质。

最后一点是 IO,这不是 rails 真正关心的问题,而是您的持久性策略。 Ruby 主义者倾向于喜欢新事物,因此您会发现对 redis 和 mongodb 等事物的一流支持,很多人都在谈论使用它们以及他们的胜利/陷阱。如果我是你,我会研究 mongo,看看是否可以接受持久性权衡。

在使用 Rails 之前,我在 java/.net 中,最终您将为基础架构支付更多费用,但与您节省的开发时间相比,这笔费用将完全相形见绌。

【讨论】:

这就是我想听到的答案;一些一般性的意见和提示。非常感谢! =) " Phusion Passenger 使用写入时复制来分叉其工作人员,因此 Rails 环境将在给定切片上的所有工作人员之间共享"。但是写时复制仅适用于 Ruby Enterprise Edition,不适用于 1.9.2。不是吗?【参考方案5】:

正如你自己所说,你已经有了答案,你只是在寻找鼓励的话:)。我自己不是 RoR 专家,但我认为可扩展性在这个平台上仍然不是一个大问题。我会建议你做一个架构尖峰(XP 术语)。使用 7000 个客户端和方法编写一个测试,该测试将执行与您打算创建的操作类似的操作。例如,您可能会加载文件、渲染视图甚至只是等待......关键是只测试您担心的事情。祝你好运!

【讨论】:

以上是关于选择 Ruby on Rails 作为基于浏览器的在线游戏的平台的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 的隐藏特性 [关闭]

如何隐藏radio_button并使用div / label作为按钮? (Ruby on Rails)

如何在带有ruby on rails的伪元素中显示来自svg sprite的图标

基于 Ruby on Rails 的网站和应用程序 [关闭]

ruby on rails 总结

ARM上的Ruby on Rails性能