Google Protobuf使用方式分析

在RPC框架中,Google Protobuf是很常用的一个库,和Apache Thrift 是同款的用于进行序列化的第三方库。
原理都是大同小异,无非就是使用方式的不同。

rmi:remote method invocation 远程方法调用
在A机器,调用B机器上的方法,
从使用者的角度,你是感知不到这个调用的,在A上用,就行了。
但是实际上是一种夸机器的一种调用。
一定是通过网络传输的方式来进行调用的。
而今天用的这个google Protobuf就是这个传输工具

这样就有一个客户端和一个服务端。通过序列化和反序列化的方式来进行传输
Client:序列化 -》 Server:反序列化
EJB rmi 缺陷:只使用于java

Client:stub 装
server:skeleton 骨架
stub 和 skeleton 通过socket完成序列化和反序列化。相互传输信息

序列化和反序列化:这是RPC或者RMI 的一个基础机制,也叫作编码(encode)与解码(decode)
RPC和RMI极其的相似
RPC:remote Procedure Call,远程过程调用
RPC的优点:许多RPC框架都是跨语言的。
比如:服务器端是java写的,客户端是phython写的,前台通过phython的方法进行调用后台服务器。

RPC的实现原理和使用场景:
1.定义一个接口说明文件(IDL):描述了对象(结构体)、结构成员,接口方法等一系列信息
2.通过RPC框架所提供的的编译器,将接口说明文件编译成具体语言文件。(如,在服务器端生成Java代码,在客户端生成phython代码)
3.在客户端和服务器端分别引入RPC编译器所生成的文件,即可像调用本地方法一样,调用远程方法。

如何判断一个RPC的性能?
1.编解码效率。编码解码的吞吐量大,效率就会高
2.在数据传递上:socket效率会高一些,HTTP协议会低一些

接下来开始正式了解Google Protobuf
官网 https://developers.google.com/protocol-buffers

message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
//注意
//required 必填项 optional选填项
//后面的数字,不是给他们赋值,而是标识。 在PB里面,每一个成员变量都会有一个数字来进行标识

--------------------------------------------------------------------------------

什么是protocol buffers?

Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.

Protocol buffers 是谷歌的语言无关的、平台无关的、可扩展的序列化结构化数据的机制—想想XML,但是更小、更快、更简单。一旦定义了数据的结构化方式,就可以使用特殊生成的源代码轻松地在各种数据流之间和之间编写和读取结构化数据,并使用各种语言。

准备Protobuf环境,和资源包
1.在官网点击下载按钮:会跳转到项目的GitHub仓库、 官网地址:https://developers.google.com/protocol-buffers

2.对于非C++的用户,点击这个链接进行资源的下载

3.需要下载的东西有两个,一个是运行环境。一个是源代码。 下载地址:https://github.com/protocolbuffers/protobuf/releases

4.下载之后是这个样子 ,解压缩,到工作环境目录,然后配置环境变量。

 (这里我就不给说如何配置环境变量了。和java完全一样。成功以后是这样的)

接下来需要配置环境变量:(和java环境变量大同小异)我的电脑,右键,属性,环境变量,Path中添加

验证:是否成功,win+R cmd :指令 protoc

 5.根据GitHub的Readme文件,java运行Protobuf需要依赖的两个依赖包,分别是:protobuf-java 和 protobuf-java-util

我们这里使用Gradle来进行项目的构建,代码如下
这些包是从Maven仓库找的,maven仓库地址:

dependencies {
compile(
"io.netty:netty-all:4.1.43.Final",
"com.google.protobuf:protobuf-java-util:3.11.0",
"com.google.protobuf:protobuf-java:3.11.0"
)
}

以上就已经环境和源码就准备完毕了,可以自行查阅开发指南进行学习

https://developers.google.com/protocol-buffers/docs/javatutorial

Netty学习——Google Protobuf使用方式分析和环境搭建的更多相关文章

  1. Netty学习——Google Protobuf的初步了解

    学习参考的官网: https://developers.google.com/protocol-buffers/docs/javatutorial 简单指南详解:这个文档写的简直是太详细了. 本篇从下 ...

  2. Java开发学习心得(一):SSM环境搭建

    目录 Java开发学习心得(一):SSM环境搭建 1 SSM框架 1.1 Spring Framework 1.2 Spring MVC Java开发学习心得(一):SSM环境搭建 有一点.NET的开 ...

  3. Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍

    系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...

  4. netty 的 Google protobuf 开发

    根据上一篇博文 Google Protobuf 使用 Java 版 netty 集成 protobuf 的方法非常简单.代码如下: server package protobuf.server.imp ...

  5. kibana5.6 源码分析以--环境搭建&技术准备

    Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的.你可以用kibana搜索.查看.交互存放在Elasticsearch索引里的数据,使用各种不同的图表.表格 ...

  6. protobuf 协议 windows 下 C++ 环境搭建

    1. 下载protobuf https://code.google.com/p/protobuf/downloads/list Protocol Buffers 2.5.0 full source - ...

  7. 【菜鸟学习Linux】-第三章- Linux环境搭建-使用VMware9安装Ubuntu 12.04系统

    上一步,我们安装了VMware9虚拟机,现在我们就是用它来安装Ubuntu12.04系统,至于Ubuntu是什么,我就不废话了,大家google一下,比我讲的清楚,好了,开始干活! Ubuntu官网下 ...

  8. 新手嘛,先学习下 Vue2.0 新手入门 — 从环境搭建到发布

    Vue2.0 新手入门 — 从环境搭建到发布 转自:http://www.runoob.com/w3cnote/vue2-start-coding.html 具体文章详细就不搬了,步骤可过去看,我这就 ...

  9. [软件测试]Linux环境中简单清爽的Google Test (GTest)测试环境搭建(初级使用)

    本文将介绍单元测试工具google test(GTEST)在linux操作系统中测试环境的搭建方法.本文属于google test使用的基础教程.在linux中使用google test之前,需要对如 ...

随机推荐

  1. [考试反思]1014csp-s模拟测试73:侵蚀

    嗯...还是没有改变那个现状 依旧只是打满了暴力,虽说T2打的的确比暴力好很多,但是因为出题人没有设分所以和暴力等同. 离上面的分差还是大的很,下面还是追的很紧 而且进几场的排名也是连续下滑... 虽 ...

  2. [考试反思]1001csp-s模拟测试(b):逃离

    如你所见,b组题,除了NC乱入直奔T2抢了我一个首杀以外A层学过FFT的人都没有参加. 竞争压力很小,题又简单,所以就造就了6个AK. 然而并不计入总分,我仍然稳在第二机房. T1lyl16分钟切掉我 ...

  3. 掌握git命令的正确使用姿势

    前言 最近在团队内部发起了一个小的python项目(用tkinter实现一个小工具),但是发现大家对git的使用还不太熟悉,不知道怎么同步代码.解决冲突等等.因为我觉得对测试工程师来说,git应该是必 ...

  4. vue+element UI以组件递归方式实现多级导航菜单

    介绍 这是一个是基于element-UI的导航菜单组件基础上,进行了二次封装的菜单组件,该组件以组件递归的方式,实现了可根据从后端接收到的json菜单数据,动态渲染多级菜单的功能. 使用方法 由于该组 ...

  5. 正睿OI集训游记

    什么嘛....就是去被虐的... 反正就是难受就是了.各种神仙知识点,神仙题目,各式各样的仙人掌..... 但是还是学会了不少东西...... 应该是OI生涯最后一次集训了吧.... 这次的感言还是好 ...

  6. Apache服务部署静态网站

    Web网络服务也叫WWW(World Wide Web),一般是指能够让用户通过浏览器访问到互联网中文档等资源的服务. 目前提供WEB网络服务的程序有Apache.Nginx或IIS等等,Web网站服 ...

  7. 深入理解java继承从“我爸是李刚”讲起

    目录 1.继承的概述 2.关于继承之后的成员变量 3.关于继承之后的成员方法 4.关于继承之后的构造方法 5.关于继承的多态性支持的例子 6.super与this的用法 前言 本文主要多方面讲解jav ...

  8. T-SQL Part V: Locks

    写SQL最常见的问题就是Dead Lock了.本篇简单介绍入门级别的Lock使用和排查. 首先来看MSDN上的官方文档(https://technet.microsoft.com/en-us/libr ...

  9. 《Java多线程面试题》系列-创建线程的三种方法及其区别

    1. 创建线程的三种方法及其区别 1.1 继承Thread类 首先,定义Thread类的子类并重写run()方法: package com.zwwhnly.springbootaction.javab ...

  10. cn_windows虚拟机配置

    1.打开“VMware”,点击“主页”,点“创建新的虚拟机”: 2.会弹出一个“新建虚拟机向导”,类型选择“典型”,点击“下一步”: 3.选择“稍后安装操作系统”,点击“下一步”: 4.选择“Micr ...