HPP与mina的学习

Posted youdream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HPP与mina的学习相关的知识,希望对你有一定的参考价值。

1.HPP学习

1.1通信过程

 

 

 

2.Protobuff 学习

 

protocol buffer

1.google的一种数据交换的格式

2.特点:独立于语言,独立于平台

3.它是一种二进制的格式,比使用 xml 进行数据交换快许多。

可以把它用于分布式应用之间的数据通信 或者 异构环境下的数据交换。

作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

 

4. PB的源码结构:

PB源码

{

PB基础库

{

Message抽象层

Descriptor抽象层

IO子系统

}

PB编译器----源码生成器

}

 

Message抽象层 : 由一个抽象的Message类和从Message类里面独立分离出来的Reflection类构成.

 

GeneratedMessageReflectionReflection的派生类,实现了抽象的Message方法。

 

Descriptor抽象层: 由平行的两组解释器构成

一组是一系列递归下降的Descriptor类群,另一组是一系列递归下降的DescriptorProto类群

Descriptor类群描述的是抽象的任意的 消息。DescriptorProto类型是对 消息格式 本身进行描述的消息

 

其中FileDescriptorProto类群描述了.proto文件的结构,任何.proto文件都可以映射到一个FileDescriptorProto对象上。

FileDescriptorProto对象和FileDescriptor之间可以相互转换。

 

重点:--PB编译器实际上是一组递归下降的CodeGenerator类群。Generator的输入是Descriptor类群,输出是

具体的派生消息类。

 

编译器的运作过程:

1 .proto文件生成FileDescriptorProto对象

2 FileDescriptorProto对象生成FileDescriptor对象

3 CodeGeneratorFileDescriptor对象生成代码

 

 

命令:

 

  protoc -I=./message --java_out=./src ./MyMessage.proto

      从上面的命令行参数中可以看出,待编译的文件为MyMessage.proto,他存放在当前目录的message子目录下。

  --java_out参数则指示编译工具我们需要生成目标语言是java,输出目录是当前目录的src子目录。这里需要补充说明的是,

因为在MyMessage.proto文件中定义了option java_package = "com.lsk.lyphone"的文件级选项,所以输出的目前是src/com/lsk/lyphone,生成的目标代码文件名是MyMessage.java

 

  protoc --java_out=./src ./proto/msg.proto

  

  

  Alarmlog.proto //报警日志表

  Clientinput.proto //理财录入表

  Bussinesstype.proto //产品类型表

  Colluploadschedule.proto //采集时间表

  Device.proto //录像表

  OvertimeRecord.proto

  Prosaverecord.proto     //录像表

  Server //服务表

  StorageConfig.proto

  Sysconfig.proto //系统参数表

 

 

proto文件注意的地方:车载的SysConfig.proto为例

package cms_8100;--c++用的

import "type/cmd.proto";--引入的proto文件

import "server/ReqServerData.proto";

import "server/RspServerData.proto";

option java_package = "com.hikvision.finance.cvtms.cms.hpp.tables";--执行proto文件后生成的java文件的路径

option java_outer_classname = "SysConfigProto";--执行proto文件生成java文件的名字

option java_generic_services = true;--是否用RPC--为啥要用rpc?

 

 

// SysConfig

message SysConfig

{

    optional int32 id                       = 1;    // 在数据库中的流水号

    optional int32 config_type              = 2;    // 系统配置类型

    optional string config_value            = 4;    // 系统配置值

    optional string config_describe         = 5;    // 该配置描述

    optional string update_time             = 6;    // 该配置更新时间

}

 

message SysConfigList

{

    optional int32 data_type            = 1;    // CMD_DT_SYSCONFIG_LIST

    repeated SysConfig config           = 2;  // SysConfig

}

 

message WriteUserPassword

{

    optional int32 cmd                      = 1;    // CMD_WDT_USER_PASSWORD

    optional int32 user_id                  = 2;    // 用户在数据库中的流水号

    optional string new_password            = 3;    // 新的密码

    optional string old_password            = 4;    // 旧密码

}

 

service SysConfigService {

 

//CMD_WDT_USER_PASSWORD 客户端修改用户密码

   rpc OperWriteUserPassword (WriteUserPassword) returns (RspServerData);

 

//CMD_DT_SYSCONFIG_LIST,获取系统配置信息sysconfig

rpc RspSysConfigListData (ReqServerData) returns (SysConfigList);

 

}

  

  

//问题

1.proto文件中的枚举类型是干嘛的呢????

 Java-nio

 

 

遇见错误

  //遇见错误--解码规则不对。

  java.nio.charset.MalformedInputException

以上是关于HPP与mina的学习的主要内容,如果未能解决你的问题,请参考以下文章

Mina---系统学习

转netty-mina对比一

mina学习资料整合

Android Mina框架的学习笔记

机器学习总结(参考源码ml.hpp)

Apache Mina