zoukankan      html  css  js  c++  java
  • JSON.NET与ProtoBuf在Socket下的应用

    1:前言

    Socket通信中,客户端与服务器之间传递的是字节流。而在现实的应用中我们需要传递有一定含义的结构。如何传递有意义的结构那?别慌本文就从这里给您做个简单介绍。
    首先我们来简单认识一下今天的主角:JSON.NET和ProtoBuf

    2:JSON.NET与ProtoBuf

    这两个都是开源的项目,项目的地址如下
    接下来我们看看两个项目在序列化对象时都是怎么做的。
    先看JSON.NET
    Code
    我们可以看到它对序列化的对象没有什么要求。(“[JsonObject]”可以去掉)
    其实JSON的原理也很简单,底层通过反射获取对象的属性然后拼接出形如[{"userName":"dabing","pwd":"110110"},{"userName":"dabing","pwd":"110110"}]的字符串。
    下面我们看ProtoBuf
    Code
    ProtoBuf对要序列化的对象要求首先要有特性来规定像[DataContract],[ProtoMember(1)]其次就是不能有带参的构造函数。

    3:JSON.NET与ProtoBuf性能的简单对比

    100(J/P) 1000(J/P) 10000(J/P) 100000(J/P)
    写 53/100 64/104 162/114 1139/239
    读     29/13           64/16              382/42          3561/322
    以上表格中100(J/P)表示100个对象在JSON/ProtoBuf下耗费的MS。
    以上数据为三次得到的平均值。

    从以上数据我们可以简单得出结论(仅供参考)
    传递的对象越多两者耗费的时间越长。
    传递单个对象的时候JSON表现出更好的性能。传递多个对象的时候ProtoBuf性能更快更稳定。
    到这里我们已经把两种框架下序列化和反序列化对象的方法和性能进行了简单的说明,接下来我们再看看两个框架在Socket下是如何应用的。

    4:JSON.NET与ProtoBuf在Socket下的写法

    以JSON方式传递对象数组
    Code
    客户端
    Code
    还有实体类
    Code
    以ProtoBuf方式传递对象数组
    服务端
    Code
    客户端
    Code
    我们从代码中可以看到,ProtoBuf本身具有很多与通信相关的特性。
    有了以上写法,我们再来看看两个框架再传递对象时的相率对比

    5:JSON.NET与ProtoBuf在Socket下传递对象效率简单对比

    我们就来看从发送开始到收完数据接收,两个框架传递不同数量对象所消耗的时间。
    100(J/P) 1000(J/P) 10000(J/P)
    json/proto 97/264 150/143 2202/366

    后记
    按照惯例,附上本文涉及的所有源代码
  • 相关阅读:
    Atitit 计算机的组成与设计 目录 1. 计算机系统是由硬件系统和软件系统两大部分组成。  1 1.1. Cpu(alu+cu ) 1 1.2. 存储内存 外村 1 1.3. Io设备 鼠标
    atitit 软件框架类库设计的艺术.docx 目录 1. index 1 2. 第2章 设计api的动力之源 14 2 2.1. .1 分布式开发 14 2 2.2. 2.2 模块化应用程序 16
    Atitit 信息检索 之音乐检索实践 艾提拉注 目录 1. 常规检索 歌手 歌名 1 1.1. 年代检索 1 1.2. 歌词检索(可以依靠web 1 1.3. 哼唱检索 原曲检索(可以使用酷
    Atitit 信息检索 文档资料的查询与检索 目录 1. 索引法 1 1.1. 名字placeholder索引 1 1.2. 文本txt索引 1 1.3. 索引集合包zip 1 1.4. 文件名
    Atitit 微服务实践 艾提拉著 微服务主要解决几个问题负载均很 目录 1. 微服务的模式 http请求层 vs服务层 1 1.1. Http vs 服务层优缺点 1 2. 实现技术 2
    Atitit SpringCloud 使用总结 目录 1.1. 启动一个服务注册中心EurekaServer 1 1.2. 三、创建一个服务提供者 (eureka client) 2 1.3. 创建
    Atitit 文档资料处理重要类库与工具 跨语言api和第三方api跨语言 类库工具 大概功能 功能 Curl httpclient 文件上传下载 数据传输rest doctotext.exe
    Atitit 网盘使用法 艾提拉著 目录 1. 需要解决几个问题 2 1.1. 多关键词搜索的问题 使用every索引解决 2 1.2. 重要文具类索引使用分类索引 日志 crm类增加000前缀
    Atitit 信息化数据采集与分析解析 技术 处理技术 爬虫与http rest json xml h5解析 db数据库 mail协议与处理 数据压缩与解压 数据处理 文本处理
    Atitit mis 管理信息系统概论 艾提拉著 目录 1. 互联网三大定律 2 1.1. 摩尔定律和 2 1.2. 吉尔德定律 电脑及网络宽带资源成为重要免费资源 2 1.3. 梅特卡夫定律 用户
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2023754.html
Copyright © 2011-2022 走看看