Scala代码实例之Kestrel系列到了本篇就基本结束了,***再总结一下。
代码读到这里,基本上已经把核心部分的代码都已经读完了。只剩下一个KestrelHandler.scala,我们就简单地说一说。
如果对Apache Mina的API有一个简单的了解之后,阅读KestrelHandler.scala已经不会有什么问题。KestrelHandler是当Mina获得一个新的链接请求之后创建出来的对象,对象的主流程就是一个act。通过 react 的机制来处理所有往来的信息,当然除了异常处理之外,只有MinaMessage.MessageReceive(msg)是会调用到PersistentQueue的一些操作。具体的函数就是handle,这里用到了一个叫做asInstanceOf的方法,这是Scala最基础类的一个方法,用途就是强制类型转换,在做与Java接口的时候,可能会经常遇到它。
handle处理报文的格式,兼容memcached的协议,也没有太多需要解释的地方。
总结一下:
读完 Kestrel 之后,给我的感觉就是,Scala的语法非常轻盈,跟六脉神剑+凌波微步似的,有的时候还真抓不住。Scala的语法和结构相当灵活,比如有些地方需要严格地写,会有很多的 () 和 . ,但是简化的写法,就用空格隔开了。另外Scala也沿袭了Ruby的语法特点,不需要每句话的***都要;,直接用回车对语法进行判断,这些优化让程序看起来更像是一些自然语言,或者——呃——更加智能。
由于Scala弱化了变量类型,同时还强化了类的定义,所有变量都是类,所有的方法也都是类,连消息传递中,也使用了case class这样的特殊类,并且让常见的单例模式,或者常用的需要重载的函数,都由编译器自动实现,确实可以让代码大大的精简,变得很轻盈。
这种语言的设置,经过先辈语言,比如Lisp,Python证明,对于把Scala语言作为初学语言的人来说,几乎是没有门槛的,因为这无非是一套剑谱而已。而对于从C,Java这样的语言转过去的工程师来说,确实有点困难,因为打惯了横拳的人,直接告诉他,虚空一指就能让敌人动弹不得,用这样的招式多半有点心虚,担心这真气不那么靠谱。而且有的时候,因为不熟指谱,打出来的命中率也不高。所以如果可以的话,还是会坚持用自己习惯的语法来写Scala。
写惯Pascal的人,写C,总用不习惯 a++这样的语法一样,写出漂亮的Scala程序,还是需要慢慢地才会适应过来。
关于Kestrel本身,就算是不学习Scala语言,它的一些设计方式也是非常值得学习的。比如说Journal.scala对文件缓存这个机制的处理方式,非常的巧妙。而为了提高每个链接的效率,而让client等待一段时间,不是直接告诉client没有新的消息,这样的细节处理,会大大提高消息队列整体的性能。非常值得学习。
毕竟它是用在Twitter上的一个核心消息队列算法呀。
【相关阅读】