在我們實際做應用級開發的過程中,用戶端與服務端需要發送多種消息類型,比如一個聊天室場景包括的消息類型;登入驗證、組建群聊、發送消息、登出等等,但如果我們都是用統一對象加if判斷來分别轉換,那麼對後期的維護成本就會非常大,這樣的代碼方式也不是一個面向對象開發的思維。面向對象的開發思路,經常會把很多if、switch等邏輯抽象成對應的接口和抽象類,以及加入工廠方式對服務進行動态編排。
那麼我們在這裡也同樣需要定義一個抽象類,抽象類裡包含了一個必須實作的辨別性屬性,用來編碼解碼時提取辨別,找到對應的處理類進行操作。這樣我們就可以不斷的去擴充我們需要的不同次元的消息處理的Handler,在這個案例裡我們模拟了;demo01、demo02、demo03三組消息處理handler,他們都統一繼承抽象類Packet,并實作裡面的getCommand方法。另外可以在這個抽象類中加入一些其他屬性,包括;版本、校驗、加密等,可以更加友善的用于處理各類通用非業務屬性邏輯行為。
1、jdk1.8【jdk1.7以下隻能部分支援netty】
2、Netty4.1.36.Final【netty3.x 4.x 5每次的變化較大,接口類名也随着變化】