Scala代碼實例之Kestrel:總結
Scala代碼實例之Kestrel系列到了本篇就基本結束了,***再總結一下。
代碼讀到這里,基本上已經把核心部分的代碼都已經讀完了。只剩下一個KestrelHandler.scala,我們就簡單地說一說。
如果對Apache Mina的API有一個簡單的了解之后,閱讀KestrelHandler.scala已經不會有什么問題。KestrelHandler是當Mina獲得一個新的鏈接請求之后創(chuàng)建出來的對象,對象的主流程就是一個act。通過 react 的機制來處理所有往來的信息,當然除了異常處理之外,只有MinaMessage.MessageReceive(msg)是會調用到PersistentQueue的一些操作。具體的函數(shù)就是handle,這里用到了一個叫做asInstanceOf的方法,這是Scala最基礎類的一個方法,用途就是強制類型轉換,在做與Java接口的時候,可能會經常遇到它。
handle處理報文的格式,兼容memcached的協(xié)議,也沒有太多需要解釋的地方。
總結一下:
讀完 Kestrel 之后,給我的感覺就是,Scala的語法非常輕盈,跟六脈神劍+凌波微步似的,有的時候還真抓不住。Scala的語法和結構相當靈活,比如有些地方需要嚴格地寫,會有很多的 () 和 . ,但是簡化的寫法,就用空格隔開了。另外Scala也沿襲了Ruby的語法特點,不需要每句話的***都要;,直接用回車對語法進行判斷,這些優(yōu)化讓程序看起來更像是一些自然語言,或者——呃——更加智能。
由于Scala弱化了變量類型,同時還強化了類的定義,所有變量都是類,所有的方法也都是類,連消息傳遞中,也使用了case class這樣的特殊類,并且讓常見的單例模式,或者常用的需要重載的函數(shù),都由編譯器自動實現(xiàn),確實可以讓代碼大大的精簡,變得很輕盈。
這種語言的設置,經過先輩語言,比如Lisp,Python證明,對于把Scala語言作為初學語言的人來說,幾乎是沒有門檻的,因為這無非是一套劍譜而已。而對于從C,Java這樣的語言轉過去的工程師來說,確實有點困難,因為打慣了橫拳的人,直接告訴他,虛空一指就能讓敵人動彈不得,用這樣的招式多半有點心虛,擔心這真氣不那么靠譜。而且有的時候,因為不熟指譜,打出來的命中率也不高。所以如果可以的話,還是會堅持用自己習慣的語法來寫Scala。
寫慣Pascal的人,寫C,總用不習慣 a++這樣的語法一樣,寫出漂亮的Scala程序,還是需要慢慢地才會適應過來。
關于Kestrel本身,就算是不學習Scala語言,它的一些設計方式也是非常值得學習的。比如說Journal.scala對文件緩存這個機制的處理方式,非常的巧妙。而為了提高每個鏈接的效率,而讓client等待一段時間,不是直接告訴client沒有新的消息,這樣的細節(jié)處理,會大大提高消息隊列整體的性能。非常值得學習。
畢竟它是用在Twitter上的一個核心消息隊列算法呀。
【相關閱讀】