zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    动画组(花瓣)以曲线落下
    关键帧动画(2)花瓣
    关键帧动画(2)心脏的跳动
    基础动画(落叶)
    核心动画3
    手表(锚点)
    利用高德地图完成用户地图选址,包括搜索位置和标签固定居中
    控件利用Masonry添加约束之后 不能立刻获取到该控件的尺寸
    添加textView的时候注意在导航控制器下的文字内容位置偏移
    当xib没有与对应的控制器连线的时候导致的崩溃
  • 原文地址:https://www.cnblogs.com/youdream/p/8986728.html
Copyright © 2011-2022 走看看