精华内容
下载资源
问答
  • Protobuf

    2020-07-11 00:30:42
    Linux(centos)下编译Protobuf:在root下进行,如果没有root权限,make install会无法mkdir 下载:git clone https://github.com/protocolbuffers/protobuf.git 或者:官方github发布版本链接:...

    Linux(centos)下编译Protobuf:在root下进行,如果没有root权限,make install会无法mkdir

    下载:git clone https://github.com/protocolbuffers/protobuf.git

    或者:官方github发布版本链接:https://github.com/protocolbuffers/protobuf/releases

    解压:根据自己下载的版本调整

    tar zxvf protobuf-cpp-3.12.3.tar.gz

    编译:可以直接./configure,生成的protoc在/usr/local/bin目录下,后面会用到

    
    cd protobuf
    
    ./configure --prefix=/usr/local/protobuf
    
    make
    
    make check
    
    make install
    

    安装成功,查看版本号:

    protoc --version

    编写proto文件

      1 syntax = "proto3";
      2 package Im;
      3 message Content
      4 {
      5         optional int32  id = 1;
      6         optional string str = 2;
      7         optional int32  opt = 3;
      8 }
    

    生成.cc&.h文件

    /usr/local/bin/protoc -I=./ --cpp_out=./ Im.proto

    报错:

    Im.proto: This file contains proto3 optional fields, but --experimental_allow_proto3_optional was not set.

    重新编译

    
    /usr/local/bin/protoc --experimental_allow_proto3_optional -I=./ --cpp_out=./ Im.proto

     

    展开全文
  • protobuf

    2020-05-12 19:55:53
    错误: protoc --gogofast_out=. *.proto github.com/gogo/protobuf/gogoproto/gogo.proto: File not found. api.proto:5:1: Import "github.com/gogo/protobuf/gogoproto/gogo.proto" was not found or had errors.

    错误:

    protoc --gogofast_out=. *.proto
    github.com/gogo/protobuf/gogoproto/gogo.proto: File not found.
    api.proto:5:1: Import "github.com/gogo/protobuf/gogoproto/gogo.proto" was not found or had errors.
    
    展开全文
  • ProtoBuf

    千次阅读 2019-11-24 23:41:19
    编码和解码 数据在网络中的传输都是以二进制字节码数据,在发送时需要编码,接收时需要解码。 codec由两部分组成,decoder(解码器)和 encoder(编码器) Netty的编码和解码 Netty提供的编码器: ...

    编码和解码


    1. 数据在网络中的传输都是以二进制字节码数据,在发送时需要编码,接收时需要解码。
    2. codec由两部分组成,decoder(解码器)和 encoder(编码器)

    Netty的编码和解码


    Netty提供的编码器:

    • StringEncoder
    • ObjectEncoder

    Netty提供的解码器:

    • StringDecoder
    • ObjectDecoder

    Netty自带的编码解码器,底层使用的时Java的序列化技术,Java的序列化技术效率不高,而且存在以下问题;

    • 不能跨语言,Server和Client都必须是Java
    • 序列化后体积太大,是二进制编码的5倍多
    • 性能太低

    为解决这些问题,Google提供了ProtoBuf

    ProtoBuf


    Google发布的开源项目,全程Goole Protocol Buffers。
    是一种高效的结构化数据存储方式,可以用来序列化。很适合做数据存储和RPC的数据交换格式。

    使用protoBuf的实例:

    1. 下载ProtoBuf
    2. 项目导入protoBuf
    		<dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>3.6.1</version>
            </dependency>
    
    1. 编写proto文件
      Student.proto
    syntax="proto3"; // 声明版本
    option java_outer_classname="StudentPOJO"; //指定外部类
    message Student{
        int32 id=1;
        string name=2;
    }
    
    1. 使用protoc.exe生成Java文件
    protoc.exe --java_out=. Student.proto
    
    1. 编写客户端处理器和服务端处理器
      ClientHandler
    	// 在管道激活时发送一个Student对象
    	@Override
        public void channelActive(ChannelHandlerContext ctx) throws Exception {
            // 发送一个student对象到服务器
            // Student时StudentPOJO的内部类
            StudentPOJO.Student student = StudentPOJO.Student.newBuilder().setId(10).setName("张三").build();
            ctx.writeAndFlush(student);
        }
    

    ServerHandler

    	@Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        	// 强转即可使用
            StudentPOJO.Student student = (StudentPOJO.Student) msg;
            System.out.println(student.getId() + student.getName());
        }
    

    服务端和客户端分别添加解码器和编码器:

    Server:

    // 指定解码器,并指定对哪种对象解码
    pipeline.addLast(new ProtobufDecoder(StudentPOJO.Student.getDefaultInstance()));
    //添加自定义Handler
    pipeline.addLast(new ServerHandler());
    

    Client:

    // 添加编码器
    pipeline.addLast(new ProtobufEncoder());
    //添加自定义的Handler
    pipeline.addLast(new ClientHandler());
    
    1. 先后启动Server、Client

    服务器控制台打印:

    10张三
    

    成功接收到客户端发送的对象。


    虽然成功接收到Student对象,但如果想要发送其他对象则又需要编写proto文件,着实麻烦。

    解决办法
    编写proto文件,使用一个message来管理其他的message。在管理的message中,添加一个标识,用于标识发送过来的是哪一个的类的对象。

    实例如下:

    syntax = "proto3";  // 指定版本
    option optimize_for = SPEED; // 加快解析
    option java_package = "com.xing.netty.codec2"; //指定包位置
    option java_outer_classname = "MyDataInfo"; //外部类名
    // protoBuf可以使用message管理其他的message
    message MyMessage{
    
        // MyMessage的第一个属性,用data_type来标传的是哪一个枚举类型
        DataType data_type = 1;
    
        // 每次只能有一个枚举类型,节省空间
        oneof dataBody{
            Student student = 2;
            Worker worker = 3;
        }
    
    }
    
    // 枚举类型
    enum DataType{
        // enum中编号从0开始
        StudentType = 0;
        WorkType = 1;
    }
    
    message Student{
        // Student类的属性
        int32 id = 1;
        string name = 2;
    }
    
    message Worker{
        // Worker类的属性
        int32 age = 1;
        string name = 2;
    }
    
    

    生成MyDataInfo.java文件。

    Server添加MyDataInfo的解码器:

    // 指定解码器,并指定对哪种对象解码
    pipeline.addLast(new ProtobufDecoder(MyDataInfo.MyMessage.getDefaultInstance()));
    pipeline.addLast(new ServerHandler());
    

    经过测试可以发送Student和Worker对象。

    展开全文
  • protobuf精讲

    2019-09-21 11:51:39
    主要讲解了google protocol buffer(以下简称protobuf)在windows平台和linux平台下的编译及使用。其中涉及跨平台编译管理工具cmake的安装及使用,protobuf的使用例子及原理,以及protobuf的高级使用方法等。
  • Mac安装protobuf 流程

    万次阅读 2018-07-13 18:08:16
    1.brew安装protobuf 1.安装brew ruby -e &amp;amp;amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)&amp;amp;amp;quot; 2.使用brew安装protoc brew ...

    在这里插入图片描述

    1.brew安装protobuf

    1.安装brew

    ruby -e "$(curl -fsSL  https://raw.githubusercontent.com/Homebrew/install/master/install)"
    

    2.使用brew安装protoc

    brew install protobuf
    

    但是这安装的是最新版的

    lcc@lcc ~$ protoc --version
    libprotoc 3.6.0
    

    1.1 安装指定版本

    如果想安装指定版本该怎么办?

    lcc@lcc ~$ brew uninstall protobuf
    Uninstalling /usr/local/Cellar/protobuf/3.6.0... (256 files, 17.2MB)
    lcc@lcc ~$ protoc --version
    -bash: /usr/local/bin/protoc: No such file or directory
    

    查看版本

    lcc@lcc ~$ brew search protobuf
    2018-07-14 15:32:00.305 defaults[13089:149521]
    The domain/default pair of (kCFPreferencesAnyApplication, AppleLanguages) does not exist
    ==> Formulae
    protobuf ✔                    protobuf-c                    protobuf-swift                protobuf@2.5                  protobuf@2.6                  protobuf@3.1                  swift-protobuf
    

    安装指定版本

    lcc@lcc ~$ brew reinstall protobuf@2.5
    ==> Reinstalling protobuf@2.5
    ==> Downloading https://homebrew.bintray.com/bottles/protobuf@2.5-2.5.0.high_sierra.bottle.tar.gz
    Already downloaded: /Users/lcc/Library/Caches/Homebrew/protobuf@2.5-2.5.0.high_sierra.bottle.tar.gz
    ==> Pouring protobuf@2.5-2.5.0.high_sierra.bottle.tar.gz
    ==> Caveats
    Editor support and examples have been installed to:
      /usr/local/opt/protobuf@2.5/share/doc/protobuf@2.5
    
    This formula is keg-only, which means it was not symlinked into /usr/local,
    because this is an alternate version of another formula.
    
    If you need to have this software first in your PATH run:
      echo 'export PATH="/usr/local/opt/protobuf@2.5/bin:$PATH"' >> ~/.bash_profile
    
    For compilers to find this software you may need to set:
        LDFLAGS:  -L/usr/local/opt/protobuf@2.5/lib
        CPPFLAGS: -I/usr/local/opt/protobuf@2.5/include
    
    ==> Summary
    ?  /usr/local/Cellar/protobuf@2.5/2.5.0: 79 files, 5.4MB
    lcc@lcc ~$ protoc --version
    -bash: /usr/local/bin/protoc: No such file or directory
    

    如果您已经尝试从源安装协议缓冲区版本,则可以在终端中键入以下内容以使源代码被自制软件版本覆盖:

    lcc@lcc ~$ brew link --force --overwrite protobuf@2.5
    Linking /usr/local/Cellar/protobuf@2.5/2.5.0... 14 symlinks created
    
    If you need to have this software first in your PATH instead consider running:
      echo 'export PATH="/usr/local/opt/protobuf@2.5/bin:$PATH"' >> ~/.bash_profile
    lcc@lcc ~$ protoc --version
    libprotoc 2.5.0
    lcc@lcc ~$
    

    2.编译安装

    2.1 下载

    https://github.com/google/protobuf/releases 找到对应版本下载
    

    2.2 生成配置文件

    下载自github的代码需要首先执行 $ ./autogen.sh 生成configure文件
    注意autogen.sh 需要gtest包,默认是从 googletest.googlecode.com下载,国内需要翻墙才能访问,

    cd protobuf
    ./autogen.sh
    

    问题1
    我执行这一步的时候总是报错

    lcc@lcc protobuf-2.7.0$ ./autogen.sh
    Google Mock not present.  Fetching gmock-1.7.0 from the web...
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:--  0:01:15 --:--:--     0curl: (7) Failed to connect to googlemock.googlecode.com port 443: Operation timed out
    

    翻墙都不行,最终用第一种方法安装成功

    解决
    参考: https://blog.csdn.net/xiexievv/article/details/47396725
    修改一下autogen.sh
    将这段:

    echo "Google Test not present.  Fetching gtest-1.5.0 from the web..."
     curl http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2 | tar jx
     mv gtest-1.5.0 gtest
    

    修改为:

    wget https://github.com/google/googletest/archive/release-1.5.0.tar.gz
    tar xzvf release-1.5.0.tar.gz
    mv googletest-release-1.5.0 gtest
    

    再次执行

    lcc@lcc protobuf-2.5.0$ ./autogen.sh
    --2018-07-16 09:50:05--  https://github.com/google/googletest/archive/release-1.5.0.tar.gz
    正在解析主机 github.com (github.com)... 52.74.223.119, 13.250.177.223, 13.229.188.59
    正在连接 github.com (github.com)|52.74.223.119|:443... 已连接。
    已发出 HTTP 请求,正在等待回应... 302 Found
    位置:https://codeload.github.com/google/googletest/tar.gz/release-1.5.0 [跟随至新的 URL]
    --2018-07-16 09:50:07--  https://codeload.github.com/google/googletest/tar.gz/release-1.5.0
    正在解析主机 codeload.github.com (codeload.github.com)... 13.229.189.0, 54.251.140.56, 13.250.162.133
    正在连接 codeload.github.com (codeload.github.com)|13.229.189.0|:443... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:未指定 [application/x-gzip]
    正在保存至: “release-1.5.0.tar.gz”
    
    release-1.5.0.tar.gz                                    [                   <=>                                                                                            ] 412.67K  48.2KB/s  用时 8.6s
    
    2018-07-16 09:50:19 (48.2 KB/s) - “release-1.5.0.tar.gz” 已保存 [422578]
    
    x googletest-release-1.5.0/
    x googletest-release-1.5.0/CHANGES
    
    + autoreconf -f -i -Wall,no-obsolete
    ./autogen.sh: line 41: autoreconf: command not found
    

    问题2:autoreconf: command not found

    解决

    lcc@lcc protobuf-2.5.0$ brew install autoconf
    Updating Homebrew...
    ==> Downloading https://homebrew.bintray.com/bottles/autoconf-2.69.high_sierra.bottle.4.tar.gz
    ######################################################################## 100.0%
    ==> Pouring autoconf-2.69.high_sierra.bottle.4.tar.gz
    ==> Caveats
    Emacs Lisp files have been installed to:
      /usr/local/share/emacs/site-lisp/autoconf
    ==> Summary
    ?  /usr/local/Cellar/autoconf/2.69: 71 files, 3.0MB
    

    再次执行报错:

    lcc@lcc protobuf-2.5.0$ ./autogen.sh
    + sed -i -e 's/RuntimeLibrary="5"/RuntimeLibrary="3"/g;
               s/RuntimeLibrary="4"/RuntimeLibrary="2"/g;' gtest/msvc/gtest-md.vcproj gtest/msvc/gtest.vcproj gtest/msvc/gtest_main-md.vcproj gtest/msvc/gtest_main.vcproj gtest/msvc/gtest_prod_test-md.vcproj gtest/msvc/gtest_prod_test.vcproj gtest/msvc/gtest_unittest-md.vcproj gtest/msvc/gtest_unittest.vcproj
    + autoreconf -f -i -Wall,no-obsolete
    Can't exec "aclocal": No such file or directory at /usr/local/Cellar/autoconf/2.69/share/autoconf/Autom4te/FileUtils.pm line 326.
    autoreconf: failed to run aclocal: No such file or directory
    lcc@lcc protobuf-2.5.0$
    

    详情 mac 系统下 autoconf 安装

    未成功

    2.3 配置

    ./configure
    make
    

    安装

    make install
    

    查看

    protoc --version
    

    Points

    ./autogen.sh是获取GoogleMock,并生成对应的configure脚本
    ./configure是进行环境检测,并生成对应的makefile或Makefile  --prefix=/usr/local可以指定安装路径
    make,按照makefile编译工程
    make install,执行makefile里面的install部分,进行安装       --prefix=/usr/local可以指定安装路径
    
    展开全文
  • protobuf安装包

    2018-02-07 14:41:07
    https://github.com/google/protobuf https://github.com/google/protobuf protobuf安装包
  • protobuf 3.6.1

    2018-10-01 21:45:50
    protocolbuffer (以下简称PB) 是google 的一种数据交换的格式,它独立于语言,独立于平台。...由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信...protobuf-3.6.1.tar.gz
  • protobuf 测试

    2017-06-17 00:45:09
    protobuf测试用例
  • protobuf 3.5.1

    2018-04-29 19:45:31
    protobuf-all-3.5.1.tar.gz protobuf-cpp-3.5.1.tar.gz protobuf-csharp-3.5.1.tar.gz protobuf-java-3.5.1.tar.gz protobuf-js-3.5.1.tar.gz protobuf-objectivec-3.5.1.tar.gz protobuf-php-3.5.1.tar.gz protobuf...
  • google protobuf

    2018-05-14 15:18:09
    google protobuf库文件,编译方法,及使用 google protobuf学习笔记一:windows下环境配置
  • Protobuf 详解

    万次阅读 2019-04-28 11:03:29
    Protobuf全称是Google Protocol Buffer,是一种高效轻便的结构化数据存储方式,可用于(数据)通信协议、数据存储等。 也可以理解为结构化数据的序列化方法,可简单类比为XML(这里主要是指在数据通信和数据存储这些...
  • protobuf 3.5.0

    2017-12-10 00:03:43
    protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。...由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用...Source code (protobuf-3.5.0.tar.gz)
  • linux protobuf

    2019-01-10 10:31:17
    linux 可下载的protobuf ,解压后直接可以用。
  • Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data. You can find protobuf's documentation on the Google ...
  • 获取源码: protobuf版本地址:...编译安装protobuf: ./autogen.sh ./configure make -j4 && make install 编译安装protobuf-c: export PKG_CONFIG_PATH=/usr/lo
  • protobuf详解一、什么是protobufprotobuf全称Google Protocol Buffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具库。protobuf是一种灵活高效的独立于语言平台的结构化数据表示方法。在...
  • protobufDemo.rar

    2020-09-25 10:39:44
    protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程
  • protobuf - Installation

    2017-08-07 22:38:50
    protobuf
  • Protobuf使用

    2017-09-20 09:59:16
    解析程序中包含了Protobuf源文件文件和示例程序(多个协议存入一个缓存区)。程序未做任何处理,方便大家直接使用。 另有说明文档,方便新手使用。
  • protobuf2.6.1

    热门讨论 2014-11-27 23:55:48
    包含protobuf2.6.1编译好的lib和exe,把lib文件放到c:\windows即可。并带有protobuf的windows和linux的源码包。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,929
精华内容 11,571
关键字:

protobuf