青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

3d Game Walkman

3d圖形渲染,網(wǎng)絡(luò)引擎 — tonykee's Blog
隨筆 - 45, 文章 - 0, 評(píng)論 - 309, 引用 - 0
數(shù)據(jù)加載中……

返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?

雖然,網(wǎng)絡(luò)編程里面的數(shù)據(jù)傳送推薦用序列化,但我不用,還是選擇結(jié)構(gòu)體(返璞歸真),有以下幾點(diǎn)理由:
1.跨平臺(tái)問(wèn)題:
  序列化確實(shí)可以很好的跨語(yǔ)言平臺(tái),可大多數(shù)網(wǎng)絡(luò)游戲不需要跨語(yǔ)言平臺(tái)

2.別以為有了序列化就不需要結(jié)構(gòu)體
  表面上序列化代碼量小,按順序讀和寫(xiě)char int short LPCSTR ... 就好,邏輯對(duì)象寫(xiě)不寫(xiě)都無(wú)所謂,那就是大錯(cuò)而特錯(cuò)了
  待序列化的對(duì)象發(fā)送前的結(jié)構(gòu)還是不可省略的序列化的過(guò)程就是 object->(按一定順序拆分)write->bytes->(按拆分順序組裝)read->object的過(guò)程
 其實(shí)object還是不能省略,很多人寫(xiě)網(wǎng)絡(luò)程序不注重邏輯對(duì)象結(jié)構(gòu),收到的一堆bytes按一定順序讀和寫(xiě)就完事了,這樣雖然靈活,但缺乏結(jié)構(gòu),容易造成混亂,調(diào)試起來(lái)是災(zāi)難
   所以結(jié)構(gòu)體(或類)還是省略不了的,所以:別以為有了序列化,就不需要結(jié)構(gòu)體了。

3.結(jié)構(gòu)體存在內(nèi)存對(duì)齊和CPU不兼容的問(wèn)題,可以避免
  的確結(jié)構(gòu)體是有內(nèi)存對(duì)齊的問(wèn)題,存在兼容性問(wèn)題,我可以選擇pack(1)把內(nèi)存對(duì)齊給關(guān)閉掉,避免兼容性問(wèn)題,既然選擇了iocp就不打算跨平臺(tái)了,可以避免結(jié)構(gòu)體平臺(tái)兼容的問(wèn)題

4.結(jié)構(gòu)體調(diào)試起來(lái)方便很多,減少內(nèi)存拷貝,效率高
  不用序列化可write和read的過(guò)程就不需要過(guò)多考慮(少寫(xiě)太多代碼了),read write 就好像現(xiàn)代社會(huì)每個(gè)人每天都要穿衣服和脫衣服一樣,原始社會(huì)需要嗎?其實(shí)人類進(jìn)化到原始裸奔狀態(tài)才是最爽快的:)
  但還是要說(shuō)句公道話:有人說(shuō)序列化編碼解碼read write 需要耗費(fèi)資源, 誠(chéng)然這個(gè)過(guò)程基本等于賦值和內(nèi)存拷貝,那點(diǎn)效率損失主要還在內(nèi)存拷貝上,這點(diǎn)效率損失很小,不能作為序列化的缺點(diǎn),當(dāng)然如果涉及到數(shù)據(jù)加密那將是另外一個(gè)話題

5.結(jié)構(gòu)體貌似呆板,發(fā)送數(shù)據(jù)限制多,發(fā)送變長(zhǎng)數(shù)據(jù)就不方便,數(shù)據(jù)組織起來(lái)也不靈活
  我想這是很多人拋棄結(jié)構(gòu)體,選擇用序列化方式發(fā)送和接受數(shù)據(jù)的一個(gè)很重要的原因
  但:其實(shí)對(duì)于變長(zhǎng)結(jié)構(gòu)(子結(jié)構(gòu)也是變長(zhǎng))的問(wèn)題,用結(jié)構(gòu)體來(lái)實(shí)現(xiàn)的確很麻煩,但并不代表不能實(shí)現(xiàn)
  我已經(jīng)實(shí)現(xiàn)了,而且讀和寫(xiě)變長(zhǎng)子結(jié)構(gòu)體嵌套任意多層都不成問(wèn)題,可以存儲(chǔ)復(fù)雜變長(zhǎng)的數(shù)據(jù)結(jié)構(gòu),
  數(shù)據(jù)就如同能自動(dòng)序列化一樣方便,這個(gè)應(yīng)該是技術(shù)難點(diǎn),但細(xì)心去做是可以實(shí)現(xiàn)的

6.關(guān)于結(jié)構(gòu)體指針
  游戲里面要發(fā)送的數(shù)據(jù)內(nèi)存事先分配好的,不存在指針,深度復(fù)制更不用考慮,所以內(nèi)存拷貝不會(huì)出錯(cuò)
  如果用到指針即使用序列化來(lái)實(shí)現(xiàn)也會(huì)面臨同樣的問(wèn)題也占不了多少便宜,由于C++這們語(yǔ)言的特點(diǎn),
  不象java那樣有個(gè)標(biāo)準(zhǔn)實(shí)現(xiàn),對(duì)于序列化本身沒(méi)有一個(gè)統(tǒng)一的標(biāo)準(zhǔn),所以可想而知,有人說(shuō):boost有它的序列化的實(shí)現(xiàn)
  其實(shí)那個(gè)實(shí)現(xiàn)不見(jiàn)得就合適你自己,如果真要做序列化,編碼和解碼的仿照那個(gè)過(guò)程自己寫(xiě)才最為牢靠,
  哪些指針對(duì)應(yīng)的內(nèi)存需要序列化那些不需要序列化,是個(gè)邏輯結(jié)構(gòu),需要自己說(shuō)了算才好(好像扯遠(yuǎn)了點(diǎn))
  說(shuō)回游戲數(shù)據(jù),既然不用需要他用到指針,結(jié)構(gòu)體用來(lái)發(fā)送數(shù)據(jù)也沒(méi)問(wèn)題的

7 平臺(tái)擴(kuò)充問(wèn)題
  退一萬(wàn)步的說(shuō):換了語(yǔ)言就基本上換了客戶端,客戶端的數(shù)據(jù)組織形式都要重寫(xiě)
  實(shí)在不行還可以考慮用xml json 編碼等等一些跨平臺(tái)的解決方案,現(xiàn)在所寫(xiě)的結(jié)構(gòu)體是可以用來(lái)做數(shù)據(jù)接收的,只是發(fā)送的不再是結(jié)構(gòu)體而已

8.綜上所述
  如果需要跨語(yǔ)言平臺(tái),不用序列化(二進(jìn)制流或xml, json文本等等)根本無(wú)法實(shí)現(xiàn)
  序列化的優(yōu)點(diǎn)還是非常多的.如果主要是跨平臺(tái)和語(yǔ)言自定義讀寫(xiě)規(guī)則,根據(jù)需要讀寫(xiě)對(duì)象的某一部分?jǐn)?shù)據(jù),
  空間浪費(fèi)少,不存在內(nèi)存對(duì)齊問(wèn)題等諸多優(yōu)點(diǎn),缺點(diǎn)就是拐彎抹角,代碼量大,調(diào)試不方便


權(quán)衡了良久
  數(shù)據(jù)如果能組織的合理,而且沒(méi)有跨語(yǔ)言平臺(tái)的要求,用結(jié)構(gòu)體也未嘗不可,畢竟數(shù)據(jù)發(fā)送直來(lái)直去還是方便些,減少內(nèi)存拷貝,效率也高了很多
  特別是調(diào)試起來(lái)容易太多了,衡量利弊我還是放棄了序列化,選擇了原始的結(jié)構(gòu)體,只是難在數(shù)據(jù)的組織(好在基本已經(jīng)克服了)

我知道:序列化很好很強(qiáng)大,很多網(wǎng)絡(luò)程序高手根本不屑于直接發(fā)一個(gè)邏輯結(jié)構(gòu)體,用這種方式就好象是旁門(mén)左道,狗肉上不了大雅之堂一樣,狗肉還是很多人喜歡吃的嘛,:)。

我還是返璞歸真選擇了結(jié)構(gòu)體

一句話:物盡其用,用的恰當(dāng),夠用就好。

如果有什么不對(duì),敬請(qǐng)拍磚,莫要客氣

posted on 2008-02-17 12:53 李侃 閱讀(8303) 評(píng)論(30)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)模塊

評(píng)論

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

缺點(diǎn)就是拐彎抹角,代碼量大?
我的結(jié)論恰恰相反, 使用序列化的最大好處是簡(jiǎn)化編程, 以及將來(lái)的可擴(kuò)展性,
至于調(diào)試, 對(duì)于這種網(wǎng)絡(luò)程序,如果再加上多線程,是很難調(diào)試的,而這種你所說(shuō)的結(jié)構(gòu)體簡(jiǎn)直是bug的溫床, 所以為了保證可靠性,一般都是用命令錄制回放來(lái)進(jìn)行測(cè)試的.
2008-02-17 13:48 | eXile

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

只要封裝的好,怎么會(huì)是BUG的溫床呢?
我的結(jié)構(gòu)體測(cè)試過(guò)了,作為容器,內(nèi)部嵌套子容器,再套N個(gè)變長(zhǎng)結(jié)構(gòu)體或子結(jié)構(gòu)體都沒(méi)問(wèn)題,比序列化方便多了。

因?yàn)橛辛诉@個(gè)實(shí)現(xiàn),我才有這個(gè)底氣寫(xiě)這篇文的,要不然我早用傳統(tǒng)方式了
2008-02-17 14:38 | 李侃

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

呵呵, 那就具體探討一下, 比如發(fā)送一個(gè)用戶名列表, 這是一個(gè)字符串的容器, 用序列化大致實(shí)現(xiàn)起來(lái)就是以下樣子:
std::vector<std::string> user_names;
archive ar;
if (ar.serialize(user_names)) socket.send(ar.data(), ar.size());

不知道你是怎么實(shí)現(xiàn)的, 歡迎探討.
2008-02-17 15:52 | eXile

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

CollectionPack collection;

StringPack p1;
strcpy(p.buffer, "jack");

StringPack p2;
strcpy(p2.buffer, "cat");

collection.appendPack(p1);
collection.appendPack(p2);

socket.send(collection, collection.size());

遍歷collection代碼大致如下:

void visttest(CollectionPack * c)
{
BasePack *p = 0;
while(c->next(&p))
{
if(p->type==ROLESIMPLEINFO_PACK)
{
RoleInfoSimplePack * aaa = (RoleInfoSimplePack *) p;
printf("%s \r\n", aaa->username);
} else if(p->type==LOGIN_PACK)
{
LoginPack * aaa = (LoginPack *) p;
printf("%s \r\n", aaa->username);
} else if(p->type == STRING_PACK)
{
StringPack *aaa = (StringPack *) p;
printf("%s \r\n", aaa->buffer);
}
else if(p->type == COLLECTION_PACK) //帶嵌套的COLLECTION_PACK
{
CollectionPack *t=(CollectionPack *)p;
visttest(t); //遞歸方式
// return;
}
}
}
2008-02-17 17:14 | 李侃

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?[未登錄](méi)  回復(fù)  更多評(píng)論   

扯什么蛋
序列化局部上還是結(jié)構(gòu)體。
有什么區(qū)別。
2008-02-17 17:23 | 小白

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?[未登錄](méi)  回復(fù)  更多評(píng)論   

我覺(jué)得沒(méi)事干的話,最好寫(xiě)一些有技術(shù)含量的東西。。。。
2008-02-17 17:24 | 小白

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   


object->(按一定順序拆分)write->bytes->(按拆分順序組裝)read->object

這才是序列化,和結(jié)構(gòu)體直接發(fā)送的區(qū)別你都不知道?

樓上的正如你的名字“小白”一個(gè)
2008-02-17 17:29 | 李侃

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

其實(shí)你的設(shè)計(jì)就是最簡(jiǎn)單的序列化實(shí)現(xiàn).
不過(guò)用較好的序列化庫(kù)對(duì)于接收時(shí)就簡(jiǎn)單多了:

std::vector<std::string> user_names;
in_archive ar(received_data, received_size);
if (ar.serialize(user_names)) visit(user_names);

在serialize函數(shù)里包含了各種異常情況處理, 比如錯(cuò)誤的數(shù)據(jù), 字符串長(zhǎng)度異常,而像你的要完全自己處理, 那太復(fù)雜了, 這正是我所說(shuō)的容易產(chǎn)生bug的地方.
2008-02-17 18:16 | eXile

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

結(jié)構(gòu)體還是序列化
不是一個(gè)概念.
2008-02-17 18:19 | WXX

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

@WXX
其實(shí)lz所說(shuō)的結(jié)構(gòu)體指的把網(wǎng)絡(luò)數(shù)據(jù)看作是POD數(shù)據(jù)類型來(lái)處理, 這樣來(lái)簡(jiǎn)化處理過(guò)程(當(dāng)然在我看來(lái), 這只能把處理過(guò)程搞得更復(fù)雜), 而序列化把網(wǎng)絡(luò)數(shù)據(jù)看作二進(jìn)制流或文本流. 從這個(gè)角度來(lái)談?wù)撨@個(gè)問(wèn)題的.
2008-02-17 18:51 | eXile

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

我得要把標(biāo)題改一下才好。

網(wǎng)絡(luò)數(shù)據(jù),以結(jié)構(gòu)體的方式直接傳送還是轉(zhuǎn)化成特定字節(jié)順序形式來(lái)傳送。
我當(dāng)然知道傳統(tǒng)方式是采用樓上的方法。我只是想打破常規(guī)。

我的出發(fā)點(diǎn)是想自定義一個(gè)容器,相當(dāng)于一個(gè)SmartStruct能裝下各種各樣的東西,其實(shí)這本身就相當(dāng)于在序列化了,只是和復(fù)雜的序列化過(guò)程還是有些的差異而已
說(shuō)來(lái)說(shuō)去就是數(shù)據(jù)的字節(jié)組織形式是按原樣收發(fā),還是變個(gè)特定順序收發(fā)
真不好意思,這篇文章確實(shí)是有些小小的混淆概念。



至于eXile 所說(shuō),數(shù)據(jù)驗(yàn)證這些目前還沒(méi)有去考慮
2008-02-17 19:09 | 李侃

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

最好的方法還是模擬rpc的解決方案,利用idl解析器自動(dòng)生成序列化,只是這需要用lex/yacc方面的咚咚,
tao,ice等都有原代碼可借鑒。
2008-02-18 17:32 | 游客

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

簡(jiǎn)單的結(jié)構(gòu)是可以,如果結(jié)構(gòu)中有指針呢?或者有帶虛函數(shù)的object呢?
2008-02-18 18:00 | giscn

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

游戲里面發(fā)送的數(shù)據(jù),并不需要包含指針和虛函數(shù)的vtable,所以我才敢這樣去做,僅僅是針對(duì)游戲數(shù)據(jù)通訊的需求而已。

不過(guò)這幾天,再三思量,看來(lái)不能圖一時(shí)痛快,太早這樣斷言
我的做法,前人應(yīng)該也用過(guò),目前可能夠用,將來(lái)也未必如此。

為了擴(kuò)展性和高質(zhì)量的代碼,我現(xiàn)在試試用自定義序列化的方式來(lái)做。
這兩天認(rèn)真閱讀了看了前人寫(xiě)的一些服務(wù)器端的代碼,感受頗多

只是覺(jué)得最大的問(wèn)題是為了要提高效率還得要盡可能減少內(nèi)存拷貝和動(dòng)態(tài)內(nèi)存的創(chuàng)建和銷毀這也是個(gè)挑戰(zhàn)。如果搞的不好,看似強(qiáng)大的序列化過(guò)程在負(fù)載嚴(yán)重的服務(wù)器上就沒(méi)效率可言了。

我之前面的做法雖然不優(yōu)雅,但讀數(shù)據(jù)就是對(duì)象,少了解碼就不存在內(nèi)存拷貝的過(guò)程了,也無(wú)需額外再去創(chuàng)建一個(gè)對(duì)象,效率方面應(yīng)該是很高的

所以...,還是想再好好想想一個(gè)折中的方案,結(jié)合各自的優(yōu)點(diǎn)。

2008-02-19 08:41 | 李侃

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

如果沒(méi)有指針和vtable, 兩者的差別也不是特別大了,傳結(jié)構(gòu)體是可行的,你后面所說(shuō)的如何減少動(dòng)態(tài)創(chuàng)建和銷毀開(kāi)銷確實(shí)是要點(diǎn),也有辦法解決。

折中的辦法已經(jīng)有啊:用序列化的語(yǔ)義,內(nèi)部直接傳內(nèi)存塊
2008-02-19 10:05 | giscn

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

跨機(jī)器傳object始終都要用一種序列化的方式,直接傳內(nèi)存塊只是實(shí)現(xiàn)細(xì)節(jié),方法之一。你說(shuō)的SmartStruct應(yīng)該是一種OO的思路,基本的Object 就可作為SmartStruct,但這樣做避免不了new delete, 如果將smartStruct 設(shè)計(jì)成union, 很顯然局限性很大。傳統(tǒng)的C語(yǔ)言的做法最直接,只要將繁瑣的switch去掉即可
2008-02-19 10:21 | giscn

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

用序列化的語(yǔ)義,內(nèi)部直接傳內(nèi)存塊?

是不是:接收數(shù)據(jù)的時(shí)候,省略掉重新組裝成對(duì)象這一步?這也是個(gè)思路

效率是高了,只是缺少了最終接收的對(duì)象,以字節(jié)的方式處理字節(jié)塊的語(yǔ)意的邏輯就不很直觀了,也是件繁瑣的事情。
2008-02-20 23:32 | 李侃

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

這兩天,我把序列化的庫(kù)重新寫(xiě)了一遍,已經(jīng)能支持基本數(shù)據(jù)類型,字符串和Stl的list vector set map 等等了...方便是方便,但想想,還是存在上面的問(wèn)題,最終接收成對(duì)象的時(shí)候,少不了分配內(nèi)存(創(chuàng)建對(duì)象) -> 數(shù)據(jù)拷貝->處理對(duì)象->釋放對(duì)象 (我想這是個(gè)可能會(huì)成為將來(lái)的一個(gè)性能瓶頸),對(duì)此我真的是耿耿于懷

如果直接去處理語(yǔ)意的內(nèi)存塊,真的又很是麻煩。
2008-02-20 23:38 | 李侃

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

數(shù)據(jù)拷貝是不可避免的,而且一般對(duì)效率影響不大,主要還是內(nèi)存管理上作一些優(yōu)化,比如使用內(nèi)存池。
2008-02-20 23:38 | eXile

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

恩,也是,最重要的是要找到重大的性能的瓶頸在哪里,也許我想太多了。
明天我再?gòu)娜豪镎規(guī)讉€(gè)人來(lái)幫我看看這個(gè)帖,希望能多些經(jīng)驗(yàn)方面的交流
2008-02-20 23:54 | 李侃

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

按需編程
結(jié)構(gòu)體,簡(jiǎn)單快速
序列化,需要寫(xiě)序列化代碼, 效率也不差
還有另外一種, 就是簡(jiǎn)單重新計(jì)算一下長(zhǎng)度,
對(duì)于只有最后一個(gè)變長(zhǎng)的包, 這樣又快又簡(jiǎn)單

簡(jiǎn)單寫(xiě)個(gè)例子:
pk1
{
int a;
}

pk2
{
int a;
int b_len;
char b[10000];
}

pk3
{
AA a; //AA是復(fù)雜的變長(zhǎng)因素類
}

pk1適合于結(jié)構(gòu)體傳送
pk2適合于改變一下包長(zhǎng)度
pk3適合于序列化

那不如稍加改造
pk1
{
int a;
}

pk2
{
int a;
int b_len;
char b[10000];
int GetLength()
{
return sizeof(*this) - sizeof(b) + b_len;
}
}

pk3
{
AA a; //AA是復(fù)雜的變長(zhǎng)因素類
void Serialize(Stream& s);
bool DeSerialize((Stream& s);
}

那么發(fā)消息函數(shù)為
template<T>
SendMsg (T* pkt)
{
__if_exist(T::Serialize)
{
Stream a;
pkt->Serialize(&a);
Send(a->GetBuffer(), a->GetBufferLength());
}
__if_not_exist(T::Serialize)
{
__if_exist(T::CalcLength)
{
Send(Pkt,pkt->GetLength());
}
__if_not_exist(T::CalcLength)
{
Send(Pkt, sizeof(T));
}
}
}
接受的時(shí)候反序列化就不寫(xiě)了, 類似的

這樣不是又快有簡(jiǎn)單嗎?
2009-01-11 13:06 | llxisdsh

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

補(bǔ)充一下:
上面的
Stream a;
可以寫(xiě)成靜態(tài)變量 或者 線程靜態(tài)變量, 這樣就沒(méi)有構(gòu)建開(kāi)銷了

2009-01-11 13:21 | llxisdsh

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

如何方便健壯就怎么寫(xiě),各有優(yōu)缺,權(quán)衡不宜罷了.
2009-01-17 17:35 | timlly

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

這帖子快一年了,回頭看看,還真是感觸頗多啊
后來(lái)我還是自己寫(xiě)了一套序列化的庫(kù),完全支持stl + zlib字節(jié)壓縮的的序列化庫(kù),最終還是沒(méi)有采用結(jié)構(gòu)體的方式

自己寫(xiě)的這套庫(kù)工作了很久了,也是我的IO和網(wǎng)絡(luò)流的底層,用起來(lái)還是很方便的,足夠了
2009-01-18 10:55 | 李侃

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

隨便搜索看到的這個(gè)文章,本意是想找個(gè) Java CLIENT 和 C++服務(wù)端(使用結(jié)構(gòu)體) 的 通信解決方案。

我都不明白,你們?yōu)槭裁丛诳紤] 什么 效率??你們明白效率的 瓶頸在什么地方???難道你的效率 瓶頸不在 網(wǎng)卡處理能力,不在使用的網(wǎng)絡(luò)帶寬,反而在 內(nèi)存上面???難道你的效率 是 SBB 的使用 單機(jī)完成的???高流量的應(yīng)用,哪一個(gè)不是 分布式,冗余式??在 基礎(chǔ)編程 水平一致的情況下。。你損失的那么點(diǎn)內(nèi)存效率。。算什么,性能能相差多少??

搞不懂,程序是 人寫(xiě)的,是給人用的。不去講究 快速開(kāi)發(fā),不去講究 調(diào)試靈活,不去考慮設(shè)計(jì)是否能 迅速的在需求改變的時(shí)候 進(jìn)行調(diào)整。不去考慮穩(wěn)定性。偏偏非得考慮 雜七雜八的莫名其妙的因素。。

你可能有很好的編程水平。不過(guò),你不是一個(gè)好的程序員。因?yàn)槟憧紤]的方向錯(cuò)誤了。而沒(méi)有正確思維方式去寫(xiě)程序,充其量只是說(shuō)是一個(gè) 高級(jí)碼工。
2009-11-25 12:00 | XXXMAN

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

我也認(rèn)為使用結(jié)構(gòu)體傳輸不錯(cuò)。
2010-01-16 19:28 | KongQue

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

將數(shù)據(jù)包序列化后,怎么知道序列化后的長(zhǎng)度。接收方有可能遇到粘包問(wèn)題,怎么解決呢?是不是發(fā)送方在發(fā)送序列化數(shù)據(jù)之前還要在做些處理?
2010-06-13 22:04 | JustCodeIT

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?[未登錄](méi)  回復(fù)  更多評(píng)論   

XXXMAN 就是一個(gè)2B
2010-07-14 16:35 | TH

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?  回復(fù)  更多評(píng)論   

小弟看了上面各位大蝦的評(píng)論,受益匪淺.但是我還是想不明白,如果按樓主說(shuō),只是為了效率,為什么在游戲中定義對(duì)像呢,直接用原始結(jié)構(gòu)體+函數(shù)效率此不是很好,本人覺(jué)得效率是重要,但維護(hù)更重要的.
2010-10-10 22:45 | 傾風(fēng)

# re: 返璞歸真,網(wǎng)絡(luò)傳輸——結(jié)構(gòu)體還是序列化?[未登錄](méi)  回復(fù)  更多評(píng)論   

誤人子弟。你不手動(dòng)序列化但實(shí)現(xiàn)了ISerializible的對(duì)象在網(wǎng)絡(luò)傳輸時(shí)還是會(huì)自動(dòng)序列化的。比如在使用webservices數(shù)據(jù)傳輸時(shí),大數(shù)據(jù)量的數(shù)據(jù)在手動(dòng)序列化后的傳輸效率要比自動(dòng)序列化快很多。
2011-06-30 10:23 | yuan
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩亚洲欧美成人| 这里只有精品视频| 欧美a级片一区| 亚洲伊人久久综合| 欧美日韩国产一区| 亚洲伦理一区| 免费在线亚洲欧美| 久久电影一区| 国产一区二区在线观看免费| 亚洲欧美日韩在线综合| 日韩视频免费看| 欧美日韩91| 99在线精品视频| 亚洲国产一区在线观看| 久久福利影视| 怡红院av一区二区三区| 另类激情亚洲| 蜜桃av综合| 亚洲美女av黄| 99亚洲视频| 国产精品伦一区| 欧美一区二区国产| 欧美一进一出视频| 伊人精品成人久久综合软件| 免费亚洲视频| 欧美精品电影| 亚洲永久免费av| 午夜精品www| 韩国av一区二区三区| 免费亚洲电影在线观看| 欧美激情欧美激情在线五月| 中文有码久久| 午夜日韩在线观看| 亚洲激情视频| 亚洲免费高清| 亚洲三级性片| 亚洲国产三级| 国产精品porn| 久久理论片午夜琪琪电影网| 久久综合99re88久久爱| 99视频热这里只有精品免费| 亚洲视频每日更新| 韩国三级电影一区二区| 久久久女女女女999久久| 免费成人在线视频网站| 亚洲一区二区黄色| 欧美在线看片| 一本高清dvd不卡在线观看| 亚洲在线成人| 在线观看一区二区精品视频| 亚洲看片一区| 国产综合自拍| 亚洲日本乱码在线观看| 国产精品普通话对白| 免费不卡在线观看| 欧美视频一区在线| 久久久午夜视频| 欧美日韩国语| 欧美69视频| 国产精品狼人久久影院观看方式| 久久嫩草精品久久久精品| 欧美日韩久久精品| 免费亚洲一区| 国产一区二区久久精品| 日韩亚洲综合在线| 亚洲国产专区校园欧美| 亚洲欧美日韩另类| 一本色道婷婷久久欧美| 久久躁日日躁aaaaxxxx| 性欧美在线看片a免费观看| 欧美精品一区二区三区视频| 久久资源av| 国产精品区二区三区日本| 亚洲电影在线看| 黄色国产精品| 欧美亚洲一区三区| 午夜国产精品视频免费体验区| 免费永久网站黄欧美| 欧美在线欧美在线| 欧美午夜宅男影院| 亚洲全部视频| 91久久久久久国产精品| 久久久成人精品| 久久狠狠婷婷| 国产精品一区二区三区四区五区| 亚洲免费激情| 日韩视频在线永久播放| 免费亚洲一区二区| 欧美国产日本韩| 亚洲第一福利视频| 久久国产精品久久精品国产| 久久成人综合网| 国产欧美在线视频| 午夜精品久久久久久久99热浪潮| 欧美一区二区三区免费观看视频| 国产精品国产馆在线真实露脸| 亚洲精品乱码| 亚洲一区二区伦理| 国产精品久久久久一区| 亚洲综合首页| 久久xxxx| 久久国产精品亚洲77777| 久久精品亚洲一区二区| 欧美午夜电影在线| 一区二区免费看| 亚洲欧美日韩国产精品| 国产精品va在线| 亚洲欧美日韩精品在线| 久久精品在这里| 狠狠干狠狠久久| 久久午夜视频| 亚洲国产综合在线| 亚洲视频图片小说| 国产精品影片在线观看| 久久精品一区二区三区四区| 毛片一区二区三区| 日韩视频在线一区| 国产精品久久一级| 久久福利影视| 亚洲精品永久免费精品| 在线亚洲电影| 国产午夜精品一区理论片飘花| 久久久噜噜噜久噜久久 | 亚洲国产精品日韩| 欧美激情乱人伦| 亚洲无毛电影| 久久尤物视频| 一区二区高清在线观看| 国产女精品视频网站免费| 久久久久久久精| 99国产精品久久久久久久| 久久精品在线视频| 中日韩美女免费视频网址在线观看 | 亚洲欧美视频在线观看| 欧美3dxxxxhd| 午夜视频在线观看一区| 亚洲二区三区四区| 国产精品乱码一区二三区小蝌蚪| 久久青草福利网站| 亚洲午夜成aⅴ人片| 亚洲国产成人porn| 久久精品成人| 亚洲午夜成aⅴ人片| 在线播放亚洲一区| 国产精品一区在线观看你懂的| 欧美成人午夜剧场免费观看| 亚洲欧美亚洲| 一区二区三区免费观看| 欧美激情视频在线播放 | 欧美一区二区三区在线| 亚洲麻豆国产自偷在线| 一区二区视频欧美| 国产精品日韩欧美| 欧美日韩精选| 欧美电影专区| 久久午夜精品一区二区| 欧美呦呦网站| 亚洲中午字幕| 一区二区三区产品免费精品久久75| 欧美阿v一级看视频| 久久精品国产v日韩v亚洲 | 亚洲精品偷拍| 美女国内精品自产拍在线播放| 亚洲欧美日韩精品在线| 99re8这里有精品热视频免费| 在线成人激情黄色| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 欧美高清视频在线播放| 久久久久国产成人精品亚洲午夜| 亚洲资源在线观看| 亚洲视频网在线直播| 夜夜嗨av一区二区三区免费区| 亚洲国产老妈| 亚洲国产二区| 亚洲国产精品一区二区三区| 一区二区在线看| 在线精品国产成人综合| 亚洲高清影视| 91久久夜色精品国产九色| 91久久久国产精品| 日韩视频在线一区二区| 夜夜嗨av一区二区三区| 一区二区三区成人精品| 亚洲一区二区三区四区视频| 一本久道久久综合中文字幕| 在线视频欧美一区| 亚洲欧美文学| 久久精品国产第一区二区三区最新章节| 午夜国产精品视频| 久久精品人人做人人爽| 久久一二三区| 欧美国产日韩在线| 亚洲欧洲一区二区天堂久久 | 亚洲免费在线观看| 欧美伊人久久久久久久久影院 | 亚洲图片欧洲图片av| 亚洲一区尤物| 久久精品国产一区二区三区| 久久亚洲精品一区| 欧美福利影院|