zoukankan      html  css  js  c++  java
  • 【SimpleMsgPack.NET】发布一个msgpack协议C#版本的解析开源库

            这两年一直都关注这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();

    输出的结果:

    image 

    看看是不是适合你。目前还是在测试当中,当然也没有用到具体的项目中。不过后面会慢慢用起来,我准备用来做通信时的数据打包。如果你发现bug,请联系我。

    qq:185511468,
    email:ymofen@diocp.org
    也可以进群[程序员之家 146605007]@我

  • 相关阅读:
    npm tip: go to the package's home page
    centos7在Evolution中配置163邮箱,被阻止收件解决方法
    emacs-显示行号以及跳转到指定行
    2020年学习目标之一——emacs
    学习前端的时候,突然想起了Sharepoint母版页里的占位符,算知识的融会不?
    问题记录--jekyll serve 启动的时候如何指定80端口
    为什么总是无法访问VMware内的web服务?
    python开发目录合并小工具 PathMerge
    python计算文件的md5值
    python+selenium 简单尝试
  • 原文地址:https://www.cnblogs.com/DKSoft/p/4171480.html
Copyright © 2011-2022 走看看