這兩年一直都關注這IOCP在網絡通信這方面的應用,當然數據的傳遞是經常需要的。今年接觸了MsgPack格式,發現他用來做傳輸時數據打包真是太爽了。因為他可以直接打包二進制數據,不需要任何的轉換。有人會說自己打包也不是什麼難事,是的,沒錯。但是有標准的格式協議,為什麼不直接使用。看了下msgpack的協議格式,壓縮基本上做到了最大化。http://msgpack.org可以了解下它的協議格式。
我的主要工作是Delphi進行開發,Delphi裡面有qmsgpack.自己也寫了一個simpleMsgPack用起來都非常舒服,這陣子晚上想看看C#,畢竟C#用來做客戶端也是不錯的。用了下C#版本的MsgPack 解析,實在是不太習慣,可能我是一個Delphier。後來決定自己寫一個SimpleMsgPack的NET版本。現在基本成型。後續還會繼續添加一些新的東西。可以上git上面直接下載,也可以NuGet中查找到輸入SimpleMsgPack可以進行下載。源碼請到github上面下載。如果有什麼bug,請一定要聯系我,我會盡快安排修復。
編譯環境:
VS2013 NET Framework 4.5 (在vs2010下面也是可以編譯的, 其他版本沒做測試)
開源地址:https://github.com/ymofen/SimpleMsgPack.Net
寫了點簡單的測試代碼。應該大家都看的明白。
MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("p.name").AsString = "張三";
msgpack.ForcePathObject("p.age").AsInteger = 25;
msgpack.ForcePathObject("p.datas").AsArray.Add(90);
msgpack.ForcePathObject("p.datas").AsArray.Add(80);
msgpack.ForcePathObject("p.datas").AsArray.Add("李四");
msgpack.ForcePathObject("p.datas").AsArray.Add(3.1415926);
// pack file
msgpack.ForcePathObject("p.filedata").LoadFileAsBytes("C:\\a.png");
// pack msgPack binary
byte[] packData = msgpack.Encode2Bytes();
MsgPack unpack_msgpack = new MsgPack();
// unpack msgpack
unpack_msgpack.DecodeFromBytes(packData);
System.Console.WriteLine("name:{0}, age:{1}",
unpack_msgpack.ForcePathObject("p.name").AsString,
unpack_msgpack.ForcePathObject("p.age").AsInteger);
Console.WriteLine("==================================");
System.Console.WriteLine("use index property, Length{0}:{1}",
unpack_msgpack.ForcePathObject("p.datas").AsArray.Length,
unpack_msgpack.ForcePathObject("p.datas").AsArray[0].AsString
);
Console.WriteLine("==================================");
Console.WriteLine("use foreach statement:");
foreach (MsgPack item in unpack_msgpack.ForcePathObject("p.datas"))
{
Console.WriteLine(item.AsString);
}
// unpack filedata
unpack_msgpack.ForcePathObject("p.filedata").SaveBytesToFile("C:\\b.png");
Console.Read();
輸出的結果:
看看是不是適合你。目前還是在測試當中,當然也沒有用到具體的項目中。不過後面會慢慢用起來,我准備用來做通信時的數據打包。如果你發現bug,請聯系我。
qq:185511468,
email:ymofen@diocp.org
也可以進群[程序員之家 146605007]@我