[Twisted] Part 5: Twistier Poetry
本文由Dave的 Part 5: Twistier Poetry 翻譯而成,你可以由 Part 1 開始閱讀這個系列的文章,也可以在 這裡 找到整個系列的目錄。 Abstract Expressionism 在 Part 4 中,我們使用了Twisted建立了我們第一個詩歌用戶端,它確實能夠很好的運作,但是仍然有進步的空間。 首先,用戶端包含了一些像建立socket、從socket接收資料這種枯燥的程式碼。Twisted應該要提供實現這些事情的支援,讓我們不必每次寫新程式的時候都要去做這些事情。因為非同步I/O需要涉及一些棘手的例外處理,正如你在 用戶端程式碼 中所看到的。而且如果你希望你的程式可以跨平台執行,還有更多棘手的問題存在。如果你哪天下午有空,可以在Twisted原始碼中搜尋「WIN32」來看看這些corner cases。 目前用戶端的另外一個問題是有關錯誤處理方面。試著執行版本1的用戶端,對一個不是伺服器的埠口下載詩歌時,用戶端就會崩潰。我們可以修改這個用戶端程式,但透過今天使用的Twisted APIs來處理錯誤會更簡單。 最後,這個用戶端不能重複使用。如果另一個模組要透過我們的用戶端下載詩歌呢?如何讓其他模組知道詩歌已經下載完畢?我們無法寫一個簡單的涵式來回傳整首詩歌,這會阻塞其他模組直到整首詩歌被讀取完畢。這確實是個問題,但我們今天還沒要修正它,我們會在未來修正這個問題。 我們將會使用一些高層次的APIs和介面來解決第一、二個問題。 Twisted框架是由眾多抽象層鬆散地組合起來的,學習Twisted就是學習這些層級中有那些東西可以用,例如APIs、介面、與實現。 由於這份文章是一個介紹,所以我們不會研究每個抽象的細節,或者對Twisted的抽象進行深度的瞭解。我們只會看看最重要的部分來好好感受一下Twisted是如何組織這些抽象層,一旦你熟悉了Twisted的架構風格,你自己學習新的內容時就簡單多了。 一般來說,每個Twisted的抽象都只與一個特定的概念相關。例如,Part 4中的用戶端使用的IReadDescriptor,它就是「一個可以讀取位元組的file descriptor」的抽象。Twisted通常由定義介面來指定實現抽象的物件的行為。在學習Twisted中新的抽象時最重要的一點就是: 大多數高層級的抽象...