Netty實戰手冊(一)
一、瞭解Netty和JSTS
那麼多文章和同人介紹,我就不說了。主要說說JSTS。
JSTS是JEES系列的一個內容,是鄙人基於Spring+Netty 實現的一套Socket服務模型,你可以很輕鬆的建立服務,並形成你自己的伺服器結構。由於現實異常,我僅實現了Netty Socket連線,至於其他協議容我以後加入。如果你有好的實現方式和思路,可以與我一起改進它。
我希望可以提供更多的思路和方式,來解決你的問題。更希望JEES系列能為你在專案中解決一部分問題。
二、JSTS的使用方式
你需要通過以下方式使用它:
1. Spring的配置檔案,來定義你的應用程式使用方式,例如:jees-core-dispatcher.xml
<!-- 基礎配置部分 --> <util:properties id="defineConfig" location="define.cfg" /> <!-- 常用的一些自定義配置項,我這裡僅配置了埠 --> <context:property-placeholder properties-ref="defineConfig" ignore-unresolvable="true" /> <context:annotation-config /> <!-- 前置功能 --> <context:component-scan base-package="com.jees.core.socket.*" /> <!-- 這裡包含了伺服器模型 --> <!-- 使用Netty作為Socket伺服器 --> <context:component-scan base-package="com.jees.jsts.netty.*" /> <!-- 這裡包含了Netty服務模型 -->
public static void main( String[] args ) {
new ClassPathXmlApplicationContext( ICommonConfig.CFG_DEFAULT ) ;
( (ISupportSocket) CommonContextHolder.getBean( ISupportSocket.SOCKET_SUPER ) ).onload();
}
3. 到這裡,Netty伺服器基本都結束了。
三、伺服器的實現方式
作為一個完整的伺服器,上面這點肯定是不夠用的。你需要為JSTS實現幾個介面,以便完成服務相關內容的擴充套件。
編寫一個類,繼承 com.jees.core.socket.support.ISupportHandler
public class HandlerService implements ISupportHandler< ChannelHandlerContext , Object >
Object作為協議的資料傳輸型別,常見的是ByteBuf , 為什麼使用Object,因為我使用Probuff作為訊息引數傳遞。為了方便可以調整,所以才使用Object。
同時還提供了可以自定粘包解包的抽象類 com.jees.jsts.netty.support.AbsNettyDecoder ,通過這種方式,我們可以把ByteBuf轉換為我們自己想用的資料格式來做資料傳遞。
四、 JSTS哪裡有?
我在碼雲上,放了相關內容的程式碼,你可以通過git下載下來。同時專案採用的Maven方式構建,同JEESJS一樣,我隨時可能做個半吊子就玩放置Play,你可以基於我的思路繼續下去。整個專案,我都是提供完整的程式碼,可以直接使用,但你需要一定程度的瞭解各個環節。
GIT地址:https://gitee.com/aiyoyoyo/jeesupport.git
歡迎各位入群討論:8802330
下次更新的內容我將提供更完善的伺服器程式碼,主要內容為資料協議的內容處理以及處理Netty的事件相應。