這段時間加入了網(wǎng)絡(luò)序列化的功能
前面的文章也提到了,看了一些服務(wù)器的大師級的代碼,SmartStruct和自定義序列化的方式都有,如果單單只用C結(jié)構(gòu)體作為語意數(shù)據(jù)載體固然可以,但很多網(wǎng)友也提出了很多質(zhì)疑,最大的缺陷就是靈活性欠佳,誠然如此。
這段時間沉下了心,好好寫了一些類主要有:
ObjectStream
StreamBuffer
SerializeMap
PacketStruct
...
等等,有了前人的經(jīng)驗,似乎也算比較順利,一個個從基本的數(shù)字,
到數(shù)組,到char[] (很多資料也稱之為:raw 二進制序列)
再到STL 的一系列容器的序列化工作都實現(xiàn)了
其中大量使用了模版類的泛型設(shè)計,不必要求一個可序列化的類必須繼承某某基類,只需要具備以下:
SerializeTag ComputeTag();
bool Read(ObjectStream& stream);
bool Write(ObjectStream& stream);
DWORD GetLength(ObjectStream& stream);
bool operator==(const PacketHeader &other) const;
五個方法就可以了,如果隨意給你一個事先定義好的類,可以實現(xiàn)序列化嗎?當然可以,只需要寫出該類的
Wrapped Proxy,再添加這5個方法,就能通過 ObjectStream 和 StreamBuffer 實現(xiàn)該類的序列化了
這些是寫完成了,回頭看看自己已經(jīng)寫好的網(wǎng)絡(luò)邏輯模塊,犯愁了。
唉……,加入序列化,相當于高層次的通訊協(xié)議全都變了,包結(jié)構(gòu)要改,所有的業(yè)務(wù)邏輯通訊代碼隨之要改。
之前的工作…… 又要寫大量的重構(gòu)代碼了。
重構(gòu)真是件痛苦的事情。
最壞的打算把之前的一些邏輯東西按現(xiàn)有思路重寫一遍嘛,二次加工也許能應(yīng)禍得福,把破舊看不過眼的地方重整理的更漂亮,好比重新裝修升級一樣
現(xiàn)在,只能告訴自己一件事,沉下心,沉注氣。
posted on 2008-03-01 17:15 李侃 閱讀(1788) 評論(4) 編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)模塊