序列化與反序列化
zookeeper的客戶端與服務(wù)端、服務(wù)端與服務(wù)端之間會(huì)進(jìn)行一系列的網(wǎng)絡(luò)通信,在進(jìn)行數(shù)據(jù)的傳輸過程中就涉及到序列化與反序列化,zookeeper使用Jute作為它的序列化組件,在使用的時(shí)候,需要序列化與反序列化的對(duì)象實(shí)現(xiàn)Record接口并實(shí)現(xiàn)該接口的serialize()
和deserialize()
方法,先看下接口Record:
它只有兩個(gè)方法,分別是serialize()
和deserialize()
,下面以ReplyHeader
為例看下它的使用。
-
- 實(shí)現(xiàn)接口Record:
-
- 創(chuàng)建BinaryOutputArchive
-
- 序列化。上一步中調(diào)用BinaryOutputArchive的
writeRecord()
方法,看下源碼:
- 序列化。上一步中調(diào)用BinaryOutputArchive的
進(jìn)入writeRecord()
方法調(diào)用Record實(shí)現(xiàn)類的serialize()
方法進(jìn)行序列化。
-
- 反序列化。創(chuàng)建BinaryInputArchive,調(diào)用Record實(shí)現(xiàn)類的
deserialize()
方法進(jìn)行反序列。
- 反序列化。創(chuàng)建BinaryInputArchive,調(diào)用Record實(shí)現(xiàn)類的
以上就是Jute進(jìn)行序列化與反序列化的基本過程。
通信協(xié)議
基于TCP/IP協(xié)議,zookeeper實(shí)現(xiàn)了自己的通信協(xié)議,設(shè)計(jì)上,客戶端與服務(wù)端、服務(wù)端與服務(wù)端之間的網(wǎng)絡(luò)通信數(shù)據(jù)結(jié)構(gòu),對(duì)于請(qǐng)求,包含數(shù)據(jù)總長(zhǎng)度、請(qǐng)求頭與請(qǐng)求體,對(duì)于響應(yīng),包含數(shù)據(jù)總長(zhǎng)度、響應(yīng)頭與響應(yīng)體,如下圖。
請(qǐng)求協(xié)議:
響應(yīng)協(xié)議:
請(qǐng)求頭的數(shù)據(jù)結(jié)構(gòu)
響應(yīng)頭的數(shù)據(jù)結(jié)構(gòu)
文章來源:http://www.zghlxwxcb.cn/news/detail-643778.html
對(duì)于請(qǐng)求體與響應(yīng)體,不同的請(qǐng)求體和響應(yīng)體的數(shù)據(jù)結(jié)構(gòu)是不同的,可以參考/zookeeper-jute/target/generated-sources/java/org/apache/zookeeper/proto
該目錄下的類。
文章來源地址http://www.zghlxwxcb.cn/news/detail-643778.html
到了這里,關(guān)于《Zookeeper》從零開始學(xué)Zookeeper源碼(二)之?dāng)?shù)據(jù)序列化與通信協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!