ruby学习二:如何定时监控网络中断

任务一:写一个ruby程序,每50秒钟向某个地址ping一次,如果没有相应,那么就发送警告信息。

require 'ping'
def every_n_seconds(n)
    loop do
        before= Time.now
        yield
        interval=n-(Time.now-before)
        sleep(interval) if interval>0
    end
end
every_n_seconds(50) do
   pingresult=Ping.pingecho("www.sina.com")
   puts pingresult
   if pingresult="true"
        puts "我向新浪的主机发送ping消息!"
    else
        puts "发送ping消息失败!"
    end
end

这里的技巧

  1. 我们把一个方法块传递给了函数every_n_seconds,我们不但传递了变量“n”,还传递了方法。
  2. yield是一个关键字,传递过去的方法在这个地方使用。
  3. sleep也是一个关键字
  4. 这里用到了ping的ruby 标准库

任务二:写一个ruby 的服务器程序(soap),如果客服端调用,那么返回一个:hello

服务器端的编码:

require 'soap/rpc/standaloneServer'
class MyServer<SOAP::RPC::StandaloneServer
    def initialize(*args)
        super
        add_method(self,'sayhelloto','username')
    end
end
class MyServer
    def sayhelloto(username)
        "hello ,#{username}."
    end
end
server=MyServer.new('coolserver','urn:mySoapServer','localhost',8888)
trap('INT') {Server.shutdown}
server.start

 

运行的有问题,以后在说把。

对于ruby的语法还需要多用一点时间学习。

posted @ 2009-03-21 17:08  乱草  阅读(1415)  评论(0)    收藏  举报