1. 程式人生 > >Netty實戰手冊(一)

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服務模型 -->
2. 你的應用程式入口,例如:

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的事件相應。