使用EventMachine

译自:Playing with eventmachine

最近这几周,我在工作中用了好几次 Ruby EventMachine,虽然它的 RDoc 还不错,但要是真想搞明白这玩意儿恐怕还是要花些功夫,所以我就写了这篇文章。

首先要弄明白的是,究竟什么是EventMachine,在什么场景会用到它。简而言之,EM(EventMachine)是个事件循环监听器(Event loop)。一旦你使用了EventMachine,它便随着ruby的主线程启动,然后去做他自己该做的事情。EM可以监听sockets、监听文件描述符、控制定时器等大量的事情。当你监听的事件触发时,EM会触发你的回调方法,如此一来你便可以处理这些事件,处理完之后再把事件控制权交还给EventMachine。

你也可以让EventMachine执行一大堆和你主要逻辑无关的代码,当这一大堆代码执行完的时候再让回调方法在主要逻辑连接上的任何请求上执行。

我们来用一段代码增进对它的理解:

例1.定时器:

我们来瞧一下这段简单的代码吧。在程序执行之前,需要先安装好 Eventmchine,我们可以通过rubygems来安装(gem install eventmachine),然后我们在程序里引入需要的部分(require 'eventmachine')。你可能会奇怪为什么我有的地方用了EventMachine,有的地方用了EM,其实他们是一样的,你可以随意对调。EM写起来比较短,不过我有时候也会用EventMachine。EventMachine#run方法用来开启主事件循环监听,在这段代码块里你可以添加自己希望的各种功能,比如某种服务,或者定时器之类。

继续阅读

ruby调用执行shell命令的方法

ruby执行shell的方法主要有:

1.Exec方法:

Kernel#exec方法通过调用指定的命令取代当前进程:

值得注意的是,exec方法用echo命令来取代了irb进程从而退出了irb。主要的缺点是,你无法从你的ruby脚本里知道这个命令是成功还是失败。

2.System方法。

Kernel#system方法操作命令同上, 但是它是运行一个子shell来避免覆盖当前进程。如果命令执行成功则返回true,否则返回false。

3.反引号(Backticks,Esc键下面那个键)

这种方法是最普遍的用法了。它也是运行在一个子shell中。

继续阅读