ruby eventmachine实践

ruby的EM库极其强大,包括了反应式框架中常见的:

1. 定时器(周期性,一次性)

2. 事件回调

3. 异步网络操作(简易的http服务器,或者基于EM的httpclient)

另外也有自己的线程池,以支持defer执行,配合上ruby的函数式编程,极其好用。下面是一些实例

  def run

   # 事件示例

   ['TERM', 'INT', 'QUIT'].each do |s| 

      trap(s) do
        EM.stop
        @pid_file.unlink()
      end
    end

  # 错误捕捉

    EM.error_handler do |e|
      @logger.error "Eventmachine problem, #{e}"
      @logger.error(e)
      @logger.error(e.backtrace)
    end

    # 周期+defer+回调,,, 其中定时器和回调都是发生在主线程的,所以不会有锁问题

    callback = proc do |res|
      @work_ng_running[res[0]] = @work_ng_running[res[0]] & ~res[1]
    end  
    
    EM.add_periodic_timer(120) do
      i = 0
      @work_cnt.times do
        i += 1
        if (@work_ng_running[i-1] & @TYPE_NG) == 0
          @work_ng_running[i-1] = @work_ng_running[i-1] |@TYPE_NG
          j = i
          EM.defer(nil, callback) do
            @workers[j - 1].chk_app
            @workers[j - 1].chk_ng
            ActiveRecord::Base.clear_active_connections!
            [j - 1, @TYPE_NG]
          end
        else
          @logger.error 'duplicate ng schedule' + i.to_s
        end
      end      
    end


  #启动

  #修改线程池
  EM.threadpool_size = 50

  EM.epoll
  EM.run {
    subscriber = AlarmChk.new(config)
    subscriber.run(options.deamon)
  }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值