2///IContract用于抽象通信協(xié)議格式的基礎(chǔ)接" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

ESFramework介紹之(1)――網(wǎng)絡(luò)通信消息協(xié)議接

系統(tǒng) 1733 0
通過網(wǎng)絡(luò)相互通信的系統(tǒng)之間(如客戶端與服務(wù)端的通信)要想正常交互,它們必須有 共同的語言 ,這種語言就是消息協(xié)議。遵守消息協(xié)議的消息才能被我們的系統(tǒng)所理解。
我們知道,消息在網(wǎng)路上傳輸?shù)氖亲止?jié)流,而我們主流的面向?qū)ο笙到y(tǒng)中處理的卻是 對象 ,如何將從網(wǎng)絡(luò)上接收到的字節(jié)流轉(zhuǎn)化為 對象 ,又如何將 對象 轉(zhuǎn)化為字節(jié)流以便通過網(wǎng)絡(luò)傳遞給其他系統(tǒng),這便是 IContract 接口定義的內(nèi)容:
ESFramework介紹之(1)――網(wǎng)絡(luò)通信消息協(xié)議接口IContract
1 /// <summary>
2 /// IContract用于抽象通信協(xié)議格式的基礎(chǔ)接口。
3 /// </summary>
4 public interface IContract
5 {
6 void FillMyself( byte []data, int offset); // 將流解析為對象
7 int GetStreamLength();
8
9 byte []ToStream(); // 將對象轉(zhuǎn)化為流
10 void ToStream( byte []buff, int offset);
11 }

IContract 接口中的各個(gè)成員的意思非常的清楚,含有 offset 參數(shù)的重載 ToStream 方法(第 10 行)可以將轉(zhuǎn)化的結(jié)果流寫到指定的 buff 中,這個(gè)方法是必須的,否則就會(huì)遇到很多需要拷貝緩沖區(qū)的操作,這將嚴(yán)重的損害運(yùn)行的效率。

很多朋友一定想到了, .NET 中將對象轉(zhuǎn)化為字節(jié)流或?qū)⒘鬓D(zhuǎn)化為對象的最方便的方式就是使用 序列化 ,是的,如果各個(gè)通信的系統(tǒng)都是基于 .NET 平臺(tái)創(chuàng)建的,當(dāng)然沒有問題,這種情況下,使用 .NET Remoting 可能會(huì)更好(使用 Remoting 可以完全省略對消息協(xié)議的關(guān)心,因?yàn)? Remoting 已經(jīng)幫你打點(diǎn)好了一切)。但是更多的情況是,相互通信的系統(tǒng)是異構(gòu)的。比如,服務(wù)端是 .NET 平臺(tái),而客戶端卻是 PDA C++ 寫的程序,遇到這種情形, .NET 的序列化、 Remoting 就無能為力了,我們必須自己手動(dòng)打理一切。你也許會(huì)說,可以使用 WebService ?呵呵,好了, ESFramework 主要關(guān)注的是構(gòu)建基于 Tcp Udp 網(wǎng)絡(luò)系統(tǒng),至于什么情況下,該使用 WebService 還是該直接在更低層的 TCP/UDP 上構(gòu)建系統(tǒng)的問題,還是留待讀者自己去思考吧:)

如果不能使用 .NET 序列化 ,那么常用的是什么方法來完成 字節(jié)流《=》消息對象 的轉(zhuǎn)換了,即 IContract.FillMyself IContract.ToStream 的實(shí)現(xiàn)方式是什么?一個(gè)字節(jié)一個(gè)字節(jié)的處理。比如,我們消息協(xié)議中規(guī)定,接收到的字節(jié)流的前四個(gè)字節(jié)是一個(gè)使用 UTF8 編碼的字符串 “@@@@” ,那么,我們解析時(shí),就用 UTF8 來將接收到的前 4 個(gè)字節(jié)解析為字符串 “@@@@” 。接下來的 4 個(gè)字節(jié)是一個(gè)整數(shù),那么你可以使用 BitConverter 類來將這四個(gè)字節(jié)解析為一個(gè)整數(shù), ...... 如此,一直將所有字節(jié)流解析完畢,生成一個(gè)完整的 消息對象 。至于字節(jié)流中的第幾個(gè)字節(jié)放什么內(nèi)容,那是你的構(gòu)建應(yīng)用時(shí)必須定義好的--消息協(xié)議。所有的消息協(xié)議都實(shí)現(xiàn) IContract 接口。在此基礎(chǔ)之上,應(yīng)用系統(tǒng)才可以在不了解協(xié)議內(nèi)部細(xì)節(jié)的情況下,對所有的消息進(jìn)行統(tǒng)一的處理(這就是 多態(tài) 的應(yīng)用?。?,如此才有可能實(shí)現(xiàn)系統(tǒng)運(yùn)行中動(dòng)態(tài)加載功能插件的能力。

ESFramework 是一個(gè)框架,它不關(guān)注你具體應(yīng)用中的具體消息協(xié)議,它只關(guān)注 IContract 接口,這樣 ESFramework 框架才可以在不同的應(yīng)用中復(fù)用。如果要使 ESFramework 框架幫助我們構(gòu)建應(yīng)用時(shí)更加容易, ESFramework 就需要把我們應(yīng)用中更多共性提取出來,那么它必須 標(biāo)準(zhǔn)化 更多的東西, IContract 只是其中的一個(gè)。接下來的文章中你會(huì)看到 NetMessage 的引入,系統(tǒng)之間通過網(wǎng)絡(luò)交互的消息都可以表示成 NetMessage ,并且 NetMessage 游走于系統(tǒng)內(nèi)部的各處理器、鉤子 Hook 之間,正是由于這種前后一致性,使得 NetMessage 成為 ESFramework 的核心要素之一,關(guān)于 NetMessage 的具體介紹請留意下篇文章:
ESFramework 介紹之( 2 )――網(wǎng)絡(luò)通信消息 NetMessage

轉(zhuǎn)到: ESFramework 可復(fù)用的通信框架(序)

ESFramework介紹之(1)――網(wǎng)絡(luò)通信消息協(xié)議接口IContract


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 毛片视频免费观看 | 中文字幕色婷婷在线视频 | 久久精品国1国二国三在 | 亚洲国产精品二区久久 | 四虎免费在线播放 | 波多野结衣一区二区在线 | 日韩欧美一区在线观看 | 国产色影院 | 欧美精品在线一区二区三区 | 99久久免费看精品国产一区 | 亚洲精品综合久久 | 99精品视频在线观看 | 亚洲国产美女精品久久 | 一区不卡在线观看 | 亚洲性在线 | 日本精品视频一视频高清 | 日本综合欧美一区二区三区 | 亚洲大片免费看 | 一级特黄aaa免费 | 九九影院最新理论片 | 欧美精品国产综合久久 | 精品久久洲久久久久护士 | 久久厕所精品国产精品亚洲 | 欧洲性大片xxxxx久久久 | 欧美国产日韩精品 | 久久无码精品一区二区三区 | 青青草一区二区免费精品 | 香蕉视频黄在线观看 | 老潮湿影院免费体验区 | 国产福利资源在线 | 91国内精品久久久久怡红院 | 亚洲人成影院午夜网站 | 中文字幕日韩精品中文区 | 日韩欧美亚洲中字幕在线播放 | 麻豆成人久久精品二区三 | 免费h片在线观看网址最新 免费v片在线观看无遮挡 | 黄 色 免 费 网站在线观看 | 成人合集大片bd高清在线观看 | 国产成+人+综合+亚洲专 | 6080一级毛片 | 成人免费久久精品国产片久久影院 |