KJFramework.Messages 高性能二进制消息框架

       这是一套企业级的高性能的易于扩展二次开发的功能框架,我们通过使用这套框架
来达到自动序列化/反序列对象的目的。 只需要简单的两步,就能使你摆脱那些繁琐的过程。
在这套框架内部,我们为您提供了2种高效的自动序列化/反序列化方案任您挑选。

  • 还记得.NET中内置提供的序列化/反序列化机制吗?
    那样的东西实在是难以接受不是吗? 超低的性能,超大的序列化后字节大小,这样序列化出来的对象
    是无法用来做网络传输的!
  • 你是否觉得你项目中正在使用的序列化/反序列化机制依然无法满足你的各种需求呢? 
    快来尝试一下这个项目吧!
  • KJFramework.Message的优点
    1. 序列化后的字节数组很小,非常适合网络传输
    2. 序列化/反序列化的速度超快(超高的性能)
    3. 最低的GC 1~2代回收次数以及GC Time占用率
    4. 非常易用的API设计
    5. 更干净的代码(更适用于二次开发)
    6. 更高效的代码质量以及DEBUG跟进速度(我们会在使用问题上,以及遇到问题的地方为您排忧解难)

       还在犹豫吗? 快来尝试一下吧,我们正在努力将KJFramework.Message框架打造为一款.NET平台下,最易用、最高效、可扩展/可定制性极高的对象自动序列化/反序列化解决方案!

                                                                                          - 创始人: 杨杰(Kevin.Kline)
                                                                                          - 以下名单为部分代码贡献者: 张超, 朱俊骐

 

 

 

A方案 - 基于强类型的解决方案(易用,严格,高效)

         A方案是一种使用强类型来进行自动序列化/反序列化的解决方案。由于是使用强类型,所以这套方案的
优点就会有很多,比如可以直接使用其中定义的字段属性来获取相关值,可以定义属于自己的扩展类,无论是
对象的消费者还是生产者都能很方便的进行契约的指定和协商。但是与此同时也会带来缺点,那就是我们必须
为不同的业务定制不同的强类型对象,并且随着我们的业务增加,我们所花费在定义对象上的时间就会越来越多,
而且到了后期我们必须要面对的对象膨胀度也是维护的难题,这样会明显的增加业务开发人员的开发成本。
并且由于是强类型,我们很难在网络传输级别达到完全的协议类型通用/公用

 

                                                                                                        ■ 关于A方案的使用手册请点击这里

 

 

 

B方案 - 基于通用元数据对象的解决方案(易用,灵活,高效)

         B方案是一种使用统一类型(Metadata Container)来进行自动序列化/反序列化的解决方案。由于是使用的
统一类,所以这套方案的优点那就是更灵活更高效更方便。 相对于上面所说的A方案来讲,我们所提供的
B方案将只使用一个统一的类型进行所有相关的处理操作。
我们巧妙的将A方案中强类型定义的各个字段变换
为了基于数据插槽的设计模式
我们将使用这个统一类型中的一组方法进行数据的插入和提取工作。原来需要
进行强类型的字段定义,并且需要每个参与网络传输的字段上都必须标有Attribute ID的做法,到了B方案中就
变成了调用方法的时候动态打入字段ID即可。

         这种全新的设计形式直接解决了A方案中的不足。现在我们的对象/协议设计更加通用和公用了,在设计
对象和协议的时候我们更加灵活了,因为不是强类型,我们没必要为了一个对象中添加或者移除一个新字段
而去修改代码,并且替换DLL文件。在一个业务高速增长的环境中,我们也不需要定义那么多的对象和协议类
型了,这样也就解决了类型膨胀速度的问题。
但是B方案依旧有它自己的缺点,那就是由于是统一类型,那么
每个字段的数据读取和写入将会代替为使用方法。
这样的做法会不得不更加严格的要求我们的对象/网络信令
的文档化
。因为我们的对象/信令已经不再是强类型,当你需要从一个对象中读取0x01或者0x07背后所代表的
字段数据时,你必须要有前置知识,知道这2个ID背后所代表的数据到底是什么。

        为了弥补这样的不足,我们在B方案的设计中,增加了兼容模式。我们允许在B方案中使用A方案中定义的
智能对象。这样一来,开发人员所需要面对的就不光是一堆ID号和零散的数据了,当我们需要传递一个原本定
义为User的对象时,没必要把User对象的字段拆分成零散的字段进行序列化,而是直接传入之前定义的User对
象即可。请注意,这是一个值得关注的设计细节,这种兼容模式所带来的好处在有些情况下是至关重要的,是
维护一个对象的完整性所必须的。

        在对象转变为日志输出方面,B方案也带来了全新的解决方案和全新的日志输出格式化效果,但是值得一提
的是,如果你为一个Metadata Container中注入了一个智能对象类型的字段,那么这个字段只会当做二进制数据
进行格式化的字符串输出,并不能像A方案中那样直接打印出智能对象内部的字段细节。这是因为B方案中提取数
据的步骤是在使用的时候进行的,而不是事先知晓的。对于智能对象的序列化/反序列化操作在我们的B方案引擎
中无法知晓到底是哪一种智能对象的派生类,所以也就无法在解析的时候得到强类型内部信息。为了维护对象的
完整性并且弥补日志输出上的不足,我们也在B方案中提供了ResourceBlock类型来充当A方案中的智能对象角
色。这个对象的使用方式,请各位稍后在B方案的使用说明上进行了解。

 

                                                                                                        ■ 关于B方案的使用手册请点击这里

 

 

 

NuGet*

    现在, KJFramework.Message框架已经可以在NuGet上被找到啦!
    我们建议您使用如下3种方式来进行KJFramework.Message的使用:

    1. 项目引用->右键菜单-> 选择(管理NuGet程序包...)->搜索"KJFramework.Message"->下载
    2. VS工具菜单项->扩展和更新->搜索"KJFramework.Message"->下载
    3. NuGet Command:

       (1). 安装:   Install-Package KJFramework.Message       
       (2). 更新:   Update-Package KJFramework.Message

 

Type  Default Value
bool FALSE
char \0
byte 0
sbyte 0
decimal 0
short 0
ushort 0
int 0
uint 0
float 0
long 0
ulong 0
double 0
Datetime DateTime.MinValue
IntPtr IntPtr.Zero
Guid Guid.Empty
TimeSpan new TimeSpan(0, 0, 0)

 

 

 

*KJFramework架构体系已经发布了基于Mono平台的解决方案! 还不快去http://kjmono.codeplex.com看看!

 

*现在, KJFramework架构体系已经全部开源了! 还不快去http://kjframework.codeplex.com看看!

 

 


*关于KJFramework, 我们很高兴的为您推荐另外2个开源项目, 希望您能够喜欢:

    #KJFramework.ServiceModel (RPC框架 - 轻量级SOA技术解决方案)
    #KJFramework.Dynamic (基于组件模式的服务构建框架, 我们推荐您使用此框架进行Windows服务的构建)

Last edited Dec 19, 2013 at 7:31 AM by g0194776, version 80