加快红宝石ssh握手

时间:2014-07-12 00:26:28

标签: ruby-on-rails ruby ssh net-ssh

我在ruby on rails并使用net-ssh gem ssh到另一台机器,运行一些脚本,将脚本的输出重新导入rails,然后在我的站点上提供输出。这需要发生很多,事实上它是我网站的核心。

脚本本身只需要很少的时间,但响应的时间范围在瞬间到15秒之间。 SSH握手需要不同的时间。

这是我执行ssh的ruby代码:

res = []
Net::SSH.start( host, user, :password => pass ) do |ssh|
  # execute container
  ssh.exec("run script") do |ch, stream, data|
      res.push(data)
  end
end
res = res.join("")
render text: res

如何让这种速度超快?

我想知道我是否应该始终保持ssh连接打开,并在每次需要运行脚本时添加新线程(这将是很多)。我见过人们谈论ControlMaster,但不知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

如果这是您网站的核心,您可能不想依赖SSH和exec。

另一种方法是在外部主机上使用Ruby / Rails而不是SSH,并通过更标准的Web API或像zeromq这样的消息传递系统将作业直接推送到Ruby。创建一致的Service-oriented architecture

否则,您应该将来自Ruby的SSH连接保持为background daemon中的长时间运行任务,然后通过IPC(例如zeromq或http或简称数据库)将作业推送到它,然后等待响应。然后,您只需要在远程主机上为每个请求启动脚本。