1
  • 用户进入页面 A 以创建新的多人游戏
  • 页面 A 中的脚本为游戏生成一个唯一 ID,并为其创建一个工作器。类似于:rails runner GameWorker.new(:game_id => game_id).start_game
  • 页面 A 中的脚本将用户重定向到页面 B,在那里他可以看到新创建的游戏,其他人也可以加入。

工人应该活着直到游戏结束。

运行启动工人的命令的正确方法是什么?它必须是非阻塞的,并且最好将输出重定向到日志文件,以防出现问题。

如果重要的话,我正在使用 Rails 3。

更新 我要改写我的问题:如何从 ruby​​ 中运行 linux 命令并且不等待命令结束?我的意思是 &>> 的等价物。例如,在 php 中,&>> 工作正常,我不需要使用任何特殊的 php 函数,但在 ruby​​ 中,它似乎被覆盖,脚本等待命令结束并获取输出。

4

1 回答 1

3

我强烈建议不要在每个游戏中运行一个进程。如果您想要一个非回合制的非阻塞游戏,那么您可能想要查看事件机器,或者类似https://github.com/celluloid/celluloid-io

无论使用哪种方式,您都将创建将在未来时间点处理的线程。

但是 - 如果您确实想在 ruby​​ 中启动一个进程,那么您就去吧.. 从如何启动并忘记一个子进程?

pid = Process.fork
if pid.nil? then
  # In child
  exec "whatever --take-very-long"
else
  # In parent
  Process.detach(pid)
end
于 2012-04-05T02:01:35.417 回答