阅读更多

6顶
0踩

开源软件

      Darks Codec是一个轻量级高效的通信消息协议编解码框架。它支持将JAVA对象与绝大部分基于字节的消息协议之间进行互相转换,以此协助开发人员便捷有效的快速构建消息协议,并为粘包、断包等问题提供了有效的解决方案。它能让开发人员从消息协议的实现中解脱出来,让其更多的关注于消息通信协议的设计及优化,以便让软件消息通信的整体设计更加完善。

 

项目开源地址:https://github.com/liulhdarks/darks-codec

项目发布地址:https://github.com/liulhdarks/darks-codec/releases

 

Version 1.0.3 release特性支持:

  • 支持采用JAVA对象定义简单或复杂的消息协议。
  • 支持JAVA对象与通信协议字节流之间进行互相转换。
  • 支持多种策略动态计算字节流总长度。
  • 支持向消息协议增加CRC16、ADLER32、自定义等校验码。
  • 支持对消息协议字节流进行多种类型或自定义方式的压缩处理。
  • 支持对消息协议字节流进行多种类型或自定义方式的加密处理。
  • 支持自定义协议Wrapper,以此实现更多扩展功能。
  • 支持复杂对象协议转换。
  • 支持多种数据类型,数据类型可自定义。
  • 支持数组类型数据。
  • 支持数据长度自动计算。
  • 支持简洁的JAVA对象序列化/反序列化方法,生成的字节流简洁可配去冗余。

简单的配置方式

只需要几行参数设置便能实现基础的消息协议。例如一个基于LITTLE-ENDIAN的协议:

 

FB FA  [ID 32bits] [VERSION 8bits] [COMMAND]  FF

 只需简单构建JAVA对象

public class SimpleMsg
{
      int id;
      byte version;
      String command;
}

 然后构建编码器

ObjectCoder coder = new ObjectCoder();
//设置LITTLE-ENDIAN
coder.getCodecConfig().setEndianType(EndianType.LITTLE);
//添加前置标识为0xFAFB,后置标识位0xFF
coder.getCodecConfig().addWrap(new IdentifyWrapper(new OCInt16(0xFAFB), new OCInt8(0xFF)));

 填充数据并编码

SimpleMsg msg = new SimpleMsg();
msg.id = 32;
msg.version = 1;  
msg.command = "running";
byte[] bytes = coder.encode(msg); //编码

 输出的结果为

FB FA   20 00 00 00   01   72 75 6E 6E 69 6E 67   FF

 

动态长度计算

除了采用前置和后置标识的方式来避免粘包断包问题外,还可以使用前置标识加总长度的方式。如果将编码器修改为

//设置总长度类型,HEAD_BODY表示总长度包含头长度和内容长度,除此之外还有BODY/AUTO
coder.getCodecConfig().setTotalLengthType(TotalLengthType.HEAD_BODY);
//只添加前置标识
coder.getCodecConfig().addWrap(new IdentifyWrapper(new OCInt16(0xFAFB)));

 输出结果为

FB FA   12 00 00 00   20 00 00 00   01   72 75 6E 6E 69 6E 67

协议封装体

通过协议封装体能够实现添加校验码、加密、压缩、标识等功能,开发者可以自定义封装体在编解码前/后期处理协议数据。

 

对象精简序列化

JAVA自身的序列化会自动增加较多的附加数据,在部分情况下过于冗余。通过Darks Codec的ObjectSerial可以轻松序列化对象,对象无需实现Serializable接口,并且生成的字节精简有效可配,更可以避免粘包断包等问题。

 

更多功能详细请参见官网 README.MD

 

 

 

 

 

6
0
评论 共 8 条 请登录后发表评论
8 楼 freezingsky 2014-06-04 21:40
只能说,又多了个选择!
7 楼 Cindy_Lee 2014-05-19 11:10
又一个protobuf吗
6 楼 diggywang 2014-05-19 10:46
报文封装都是这么个理
5 楼 shenshouer 2014-05-19 10:05
好东西,帮了个大忙,正在写通讯这块,包都封装1/3了,感觉太麻烦了!
4 楼 nodexy 2014-05-19 09:42
挺好的东西,在网络通信领域有很大的帮助,顶楼主一个!!
3 楼 andot 2014-05-17 13:29
跟hprose不太一样,hprose是跨语言的,并且hprose提供了一个很方便的rpc实现。
2 楼 ostholz 2014-05-16 15:55
这个跟那个hprose有点像
1 楼 sayji 2014-05-16 13:13
好像挺高级的东西。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • zeroc ice教程 ice环境配置 Ice中文教程 C++ ICE java ICE ICE入门 ice基础教程 ice开发文档

    教程包括: 第一部分 Ice综述 第二部分 核心概念 第三部分 高级Ice 第四部分 Ice服务 附录ice各种配置说明

  • ICE 的聊天demo 含有ICE的配置文档

    ICE 的聊天demo,里面含ICE的安装和到vs2013里面的配置

  • ice 文件服务器,Ice组件安装及Ice Grid配置和部署

    Ice组件安装及IceGrid配置和部署一、Ice组件安装1.下载,去官方网站下载最新版,当前是ice3.4.22.建一个目录(例如/public),把下载的tar.gz文件复制到这个目录下,解压tar-zxvfIce-3.4.2.tar.gz这样/public目录下有...

  • ICE线程池数量配置

    线程池配置属性必须在initialize()操作之前被创建。这里可以设置的值有两个默认线程数(Size)和最大线程数(SizeMax)。其中Size表示启动后默认创建的线程数量,ICE在通讯过程中会根据实际情况动态调整线程数量以...

  • Ice飞冰《配置总结》

    根据公司项目使用的配置对应着官网做一个总结,下面复制部分公司项目用作学习及参考 应用入口:app.tsx中appConfig中app app: { rootId: 'ice-container', addProvider: ({ children }) => ( <...

  • ICE安全插件配置实战指南

    配置ICE安全插件,部署所用到的工具主要有icegridnode、icegridregistry、icegridadmin等。

  • ice-builder-visualstudio:从Visual Studio为MSBuild配置Ice Builder

    Ice Builder for Visual Studio是一个Visual Studio扩展,可以在Visual Studio IDE中为您的C ++和C#项目配置 。 它充当MSBuild的Ice Builder的前端:所有构建时间处理均由Ice Builder for MSBuild执行。 适用于...

  • windows配置ICE环境变量

    2、本文简单介绍ice环境变量配置(ice 3.6.2为例) 3、下载地址zeroc官网windows 二 配置 step1:安装软件(略) setp2:设置环境变量 新建变量: ICE_HOME = ICE安装根目录(bin上一级) path添加: W...

  • ice配置与实例(VS2015)

    ice配置与使用一、ice配置1、ICE安装1、进入程序包管理器(工具->NuGet包管理器->程序包管理器控制台)2、安装ice、ice builder、ice插件2.1、安装ice,选择项目,输入install-package zeroc.ice.v140 -...

  • Ice飞冰页面配置&菜单配置&日志打印&环境配置《六》

    scrollToTop:用于渲染页面前是否需要将当前页面滚动至顶部,这个配置用于嵌套路由的应用场景。 const HomePage = () => { return ( // jsx code... ) } HomePage.pageConfig = { scrollToTop: true } ...

  • ICE3.3版安装及配置。

    NULL 博文链接:https://wj196.iteye.com/blog/1671027

  • ICE进阶,使用配置文件进行配置--java

    最后也成功调用了另一个工程的方法。但是这种方式耦合太强,代码都写死,所以需要使用到配置文件配置。 2. 进阶配置 从上一篇完成的工程的基础上进行修改 在ICE Server工程的根目录创建 resource目录,这里放...

  • Iceberg数据湖的Table、Catalog、Hadoop配置Configuration

    Configuration 1.1 table properties 1.1.1 Read properties 因为Iceberg在HDFS上的data文件,通常都是一个个的小文件,所以读取的时候会先进行combine,然后再返回数据。下面是进行combine的一些配置 Property ...

  • Zeroc-Ice(ice-Touch)详解与配置应用

    从16年初我开始接触到ZeroC-Ice, 紧接着公司的项目中也应用了Ice框架, 到现在也一年多了. 今天我就来做个总结, 谈谈Ice, Ice的优势, 还有iOS端的集成应用等. 博主才疏学浅, 若有不对之处, 还望大家指正.

  • ice安装及配置

    最近在研究服务器端技术。...群里面有高手说可以使用ice。所有的通信可以定义为接口,也就是说框架已经做好了协议编码/解码。这正是我想要的。这里记录一下,方便以后使用。 于是开始动手。我到官网上下载软件。htt

  • Ice-3.7.4.msi for windows版

    7 服务器端没有指定adapter的端口和ip,仅仅随便给了一个名字,并使用该名字从配置文件中读取信息: 启动服务器时没有问题正常,但是客户端无法连接 原因: 对象适配器无效 错误信息: 抛出异常: Ice::...

  • Windows下ICE框架的安装与配置

    新手教程,着重讲一下有些教程有没讲到的点或者错误的点,可以和其他教程一起看(本教程...想了个办法,调出下载页面的源代码,从中找出下载链接,部分下载链接如下:3.7.1版本:https://zeroc.com/download/Ice/3...

  • ice-scripts:建议升级到icejs。基于webpack的高可配置开发内置工具

    可通过ice.config.js进行完全配置,允许您的项目进行配置 插件系统提供了丰富的功能,并允许社区构建可重用的解决方案 对ES6 +,TypeScript,Less,Sass,CSS模块的开箱即用支持 通过webpack-chain轻松修改内置的...

  • ICE 的安装及在vs2013里面的配置

    ICE 的安装及在vs2013里面的配置

  • Windows下ZeroC Ice-3.6.4的安装与配置

    新手教程,着重讲一下有些教程...ICE版本:3.6.4 1,下载安装: 官网下载有时很慢,甚至下载不了。我已经下载下来了,下面可以从网盘下载,部分下载链接如下: 3.7.1版本:https://sn9.us/file/632278-402420529 3...

Global site tag (gtag.js) - Google Analytics