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类构成.
GeneratedMessageReflection是Reflection的派生类,实现了抽象的Message方法。
Descriptor抽象层: 由平行的两组解释器构成
一组是一系列递归下降的Descriptor类群,另一组是一系列递归下降的DescriptorProto类群
Descriptor类群描述的是抽象的任意的 消息。DescriptorProto类型是对 消息格式 本身进行描述的消息
其中FileDescriptorProto类群描述了.proto文件的结构,任何.proto文件都可以映射到一个FileDescriptorProto对象上。
FileDescriptorProto对象和FileDescriptor之间可以相互转换。
重点:--PB编译器实际上是一组递归下降的CodeGenerator类群。Generator的输入是Descriptor类群,输出是
具体的派生消息类。
编译器的运作过程:
1 从.proto文件生成FileDescriptorProto对象
2 从FileDescriptorProto对象生成FileDescriptor对象
3 CodeGenerator从FileDescriptor对象生成代码
命令:
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的学习的主要内容,如果未能解决你的问题,请参考以下文章