[email protected]:~$

  • Celluloid::Actor结构与调用过程

    ruby是面向对象语言,但是Celluloid做到了无需更换代码,仅在类中include Celluloid就可以进行面向Actor编程 class A include Celluloid def foo puts "bar" end end 此时A已经代表一个Actor类 a = A.new a.class #A a.class.ancestors #[A, Celluloid::InstanceMethods, Celluloid, Object, PP::ObjectMixin, Kernel, BasicObject] a.is_a? A #true A === a #true of course! a.is_a? Celluloid #true Celluloid === a #false W..T..F?? wtf? a是A的实例,我们的测试可以通过 但是当我们用Celluloid来测试时a.is_a?和Celluloid.===结果不一致 ###why? 因为a并不是A的实例 a.class #A...

  • Actor入门

    最近对Actor模式很有兴趣(Celluloid), 记下自己的心得和对Actor模式的理解。 要想知道一个东西有什么必要性,就要知道没有它的话是什么样子 如果没有struct… point1x = point1y = point2x = point2y = 0 如果没有class… def rectangle_area rect #something... end def circle_area circle #something... end #etc... 如果没有actor… #好吧,可能没有的话也没什么关系.. 当然还是有关系的.. 比如我们设计一个账户 class Account attr_accessor :money def take_money amount if amount < money new_amount = money - amount self.money = new_amount "ok!" else...

  • reel和eventmachine的粗略对比[更新2013年7月]

    四个月后的更新 因为水平不足,对Reel造成了极大的误解.. (希望不要误解到别人) 更正下之前的误解 Reel其实是异步IO单线程的,可以认为和EM一样,但是大家都知道Celluloid主打的就是并行编程 于是..如果你想要并行的话可以调用detach方法,并且自己管理socket 当然这样做的话就不是异步IO了(WTF……….) 另外reeltalk中的代码貌似也有一些问题.. 所以现在来说还是优先使用eventmachine, celluloid-io & reel目前还是有一些问题(当然celluloid已经比较成熟了, 可以大胆使用) 起因 本来是很追捧EM的,直到看到了一篇文章 感觉之前学过些erlang, 应该很容易理解celluloid. 而且最近工作中也需要用到websocket,果断选择reel来做(无条件听信大牛..) 一坑 看了下文档,结果从README的helloworld就被坑了, 粘贴后执行程序会直接退出,不会block住 源码 require 'reel' Reel::Server.supervise("0.0.0.0", 3000) do |connection| while request = connection.request case request when Reel::Request puts "Client requested: #{request.method} #{request.url}" request.respond :ok, "Hello, world!" when Reel::WebSocket puts "Client made...