天天看點

編解碼-marshalling

JBoss的Marshalling序列化架構,它是JBoss内部使用的序列化架構,Netty提供了Marshalling編碼和解碼器,友善使用者在Netty中使用Marshalling。

JBoss Marshalling是一個Java對象序列化包,對JDK預設的序列化架構進行了優化,但又保持跟java.io.Serializable接口的相容,同時增加了一些可調的參數和附加的特性,這些參數和特性可通過工廠類進行配置。

編解碼工廠類:

服務端代碼示例:

用戶端代碼示例:

運作結果:

服務端結果:

14:48:45.475 [nioEventLoopGroup-2-1] INFO i.n.handler.logging.LoggingHandler - [id: 0x71ea5def, /0:0:0:0:0:0:0:0:8080] RECEIVED: [id: 0x876eb7b4, /127.0.0.1:57423 => /127.0.0.1:8080]

14:48:45.707 [nioEventLoopGroup-3-1] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetectionLevel: simple

Service accept client subscribe req : [SubscribeReq [subReqID=0, userName=Lilinfeng, productName=Netty For Marshalling, phoneNumber=138xxxxxxxxx, address=南京市江甯區方山國家地質公園]]

Service accept client subscribe req : [SubscribeReq [subReqID=1, userName=Lilinfeng, productName=Netty For Marshalling, phoneNumber=138xxxxxxxxx, address=南京市江甯區方山國家地質公園]]

..........................................................................

Service accept client subscribe req : [SubscribeReq [subReqID=9, userName=Lilinfeng, productName=Netty For Marshalling, phoneNumber=138xxxxxxxxx, address=南京市江甯區方山國家地質公園]]

用戶端結果:

Receive server response : [SubscribeResp [subReqID=0, respCode=0, desc=Netty book order succeed, 3 days later, sent to the designated address]]

Receive server response : [SubscribeResp [subReqID=9, respCode=0, desc=Netty book order succeed, 3 days later, sent to the designated address]]

由于我們模拟了TCP的粘包/拆包場景,但是程式的運作結果仍然正确,說明Netty的Marshalling編解碼器支援半包和粘包的處理,對于開發者而言,隻需要正确地将Marshalling編碼器和解碼器加入到ChannelPipeline中,就能實作對Marshalling序列化的支援。

利用Netty的Marshalling編解碼器,可以輕松地開發出與JBoss内部子產品進行遠端通信的程式,而且支援異步非阻塞,這無疑降低了基于Netty開發的應用程式與JBoss内部子產品對接的難度。

pom.xml