基本原理
要實(shí)現(xiàn)網(wǎng)絡(luò)機(jī)器間的通訊钞脂,首先得來看看計(jì)算機(jī)系統(tǒng)網(wǎng)絡(luò)通信的基本原理怔昨,在底層層面去看薄腻,網(wǎng)絡(luò)通信需要做的就是將流從一臺(tái)計(jì)算機(jī)傳輸?shù)搅硗庖慌_(tái)計(jì)算機(jī)编振,基于傳輸協(xié)議和網(wǎng)絡(luò)IO來實(shí)現(xiàn)索烹,所有的分布式應(yīng)用通訊都基于這個(gè)原理而實(shí)現(xiàn)工碾,只是為了應(yīng)用的易用,各種語言通常都會(huì)提供一些更為貼近應(yīng)用易用的應(yīng)用層協(xié)議:
傳輸協(xié)議
比較出名的有socket百姓、http渊额、tcp、udp等等,其中socket作為最底層的傳輸協(xié)議旬迹,而http火惊、tcp、udp都是在此基礎(chǔ)上為某類應(yīng)用而擴(kuò)展出的協(xié)議
網(wǎng)絡(luò)IO
主要有bio奔垦、nio屹耐、aio三種方式。
應(yīng)用級(jí)協(xié)議
遠(yuǎn)程服務(wù)通訊椿猎,需要達(dá)到的目標(biāo)是在一臺(tái)計(jì)算機(jī)發(fā)起請(qǐng)求惶岭,另外一臺(tái)機(jī)器在接收到請(qǐng)求后進(jìn)行相應(yīng)的處理并將結(jié)果返回給請(qǐng)求端,這其中又會(huì)有諸如one way request犯眠、同步請(qǐng)求按灶、異步請(qǐng)求等等請(qǐng)求方式,按照網(wǎng)絡(luò)通信原理筐咧,需要實(shí)現(xiàn)這個(gè)需要做的就是將請(qǐng)求轉(zhuǎn)換成流鸯旁,通過傳輸協(xié)議傳輸至遠(yuǎn)端,遠(yuǎn)端計(jì)算機(jī)在接收到請(qǐng)求的流后進(jìn)行處理量蕊,處理完畢后將結(jié)果轉(zhuǎn)化為流铺罢,并通過傳輸協(xié)議返回給調(diào)用端。
原理是這樣的残炮,但為了應(yīng)用的方便韭赘,業(yè)界推出了很多基于此原理之上的應(yīng)用級(jí)的協(xié)議,使得大家可以不用去直接操作這么底層的東西吉殃,通常應(yīng)用級(jí)的遠(yuǎn)程通信協(xié)議會(huì)提供:
1辞居、為了避免直接做流操作這么麻煩楷怒,提供一種更加易用或貼合語言的標(biāo)準(zhǔn)傳輸格式蛋勺;
2、網(wǎng)絡(luò)通信機(jī)制的實(shí)現(xiàn)鸠删,就是替你完成了將傳輸格式轉(zhuǎn)化為流抱完,通過某種傳輸協(xié)議傳輸至遠(yuǎn)端計(jì)算機(jī),遠(yuǎn)端計(jì)算機(jī)在接收到流后轉(zhuǎn)化為傳輸格式刃泡,并進(jìn)行存儲(chǔ)或以某種方式通知遠(yuǎn)端計(jì)算機(jī)巧娱。
應(yīng)用級(jí)協(xié)議
遠(yuǎn)程服務(wù)通訊,需要達(dá)到的目標(biāo)是在一臺(tái)計(jì)算機(jī)發(fā)起請(qǐng)求烘贴,另外一臺(tái)機(jī)器在接收到請(qǐng)求后進(jìn)行相應(yīng)的處理并將結(jié)果返回給請(qǐng)求端禁添,這其中又會(huì)有諸如one way request、同步請(qǐng)求桨踪、異步請(qǐng)求等等請(qǐng)求方式老翘,按照網(wǎng)絡(luò)通信原理,需要實(shí)現(xiàn)這個(gè)需要做的就是將請(qǐng)求轉(zhuǎn)換成流,通過傳輸協(xié)議傳輸至遠(yuǎn)端铺峭,遠(yuǎn)端計(jì)算機(jī)在接收到請(qǐng)求的流后進(jìn)行處理墓怀,處理完畢后將結(jié)果轉(zhuǎn)化為流,并通過傳輸協(xié)議返回給調(diào)用端卫键。
原理是這樣的傀履,但為了應(yīng)用的方便,業(yè)界推出了很多基于此原理之上的應(yīng)用級(jí)的協(xié)議莉炉,使得大家可以不用去直接操作這么底層的東西钓账,通常應(yīng)用級(jí)的遠(yuǎn)程通信協(xié)議會(huì)提供:
1、為了避免直接做流操作這么麻煩呢袱,提供一種更加易用或貼合語言的標(biāo)準(zhǔn)傳輸格式官扣;
2、網(wǎng)絡(luò)通信機(jī)制的實(shí)現(xiàn)羞福,就是替你完成了將傳輸格式轉(zhuǎn)化為流惕蹄,通過某種傳輸協(xié)議傳輸至遠(yuǎn)端計(jì)算機(jī),遠(yuǎn)端計(jì)算機(jī)在接收到流后轉(zhuǎn)化為傳輸格式治专,并進(jìn)行存儲(chǔ)或以某種方式通知遠(yuǎn)端計(jì)算機(jī)卖陵。
還有EJB采用的ORMI、Spring自己定義的一個(gè)簡(jiǎn)單的Http Invoker等等张峰。
可選實(shí)現(xiàn)技術(shù)
總結(jié)
在遠(yuǎn)程通訊領(lǐng)域中泪蔫,涉及的知識(shí)點(diǎn)還是相當(dāng)?shù)亩嗟模缬校和ㄐ艆f(xié)議(Socket/tcp/http/udp/rmi/xml-rpc etc.)喘批、消息機(jī)制撩荣、網(wǎng)絡(luò)IO(BIO/NIO/AIO)、MultiThread饶深、本地調(diào)用與遠(yuǎn)程調(diào)用的透明化方案(涉及java classloader餐曹、Dynamic Proxy、Unit Test etc.)敌厘、異步與同步調(diào)用台猴、網(wǎng)絡(luò)通信處理機(jī)制(自動(dòng)重連、廣播俱两、異常饱狂、池處理等等)、Java Serialization (各種協(xié)議的私有序列化機(jī)制等)宪彩、各種框架的實(shí)現(xiàn)原理(傳輸格式休讳、如何將傳輸格式轉(zhuǎn)化為流的、如何將請(qǐng)求信息轉(zhuǎn)化為傳輸格式的尿孔、如何接收流的俊柔、如何將流還原為傳輸格式的等等)