protobuf

creator中使用protobufjs

倾然丶 夕夏残阳落幕 提交于 2019-12-02 14:45:40
安装 sudo npm install -g protobufjs@6.8.8 pbjs -v (不行的话:npm install semver@5.5.0再试一试) 输出版本信息 protobuf.js v6.7.0 CLI for JavaScript和相关命令 pbts -v 定位到.proto文件目录 单个.proto文件转js pbjs -t static-module -w commonjs -o ChatMsg.js ChatMsg.proto 多个.proto文件转js pbjs -t static-module -w commonjs -o CMsg_pb.js *.proto 将转的js转ts(js文件超大,ts却很小) pbts -o CMsg_pb.d.ts CMsg_pb.js 导出的js文件超大,可以考虑去掉不用的函数。后面加入命令 --no-convert或者 --no-delimited pbjs -t static-module -w commonjs -o ChatMsg.js ChatMsg.proto --no-convert 少了部分函数,文件会小很多,当然要确定不需要这些函数。 将导出的js和ts文件放到工程脚本文件夹下; 同时将/usr/local/lib/node_modules/protobufjs/dist/protobuf

protobuf初识

亡梦爱人 提交于 2019-12-02 10:54:05
protobuf初识 protobuf是一种高效的数据格式,平台无关、语言无关、可扩展,可用于 RPC 系统和持续数据存储系统。 protobuf protobuf介绍 Protobuf 是 Protocol Buffer 的简称,它是Google公司于2008年开源的一种高效的平台无关、语言无关、可扩展的数据格式,目前Protobuf作为接口规范的描述语言,可以作为Go语言RPC接口的基础工具。 protobuf使用 protobuf 是一个与语言无关的一个数据协议,所以我们需要先编写IDL文件然后借助专用工具生成指定语言的代码,从而实现数据的序列化与反序列化过程。 大致开发流程如下: 1. IDL编写 2. 生成指定语言的代码 3. 序列化和反序列化 protobuf语法 protobuf3语法指南 编译器安装 ptotoc protobuf 协议编译器是用c++编写的,根据自己的操作系统下载对应版本的 protoc 编译器: https://github.com/protocolbuffers/protobuf/releases,解压后拷贝到`GOPATH/bin`目录下 。 protoc-gen-go 安装生成Go语言代码的工具 go get -u github.com/golang/protobuf/protoc-gen-go 编写IDL代码 在 protobuf

centos7安装protobuf-c

社会主义新天地 提交于 2019-12-02 05:23:31
设备服务与设备端通讯,设备服务使用Go构建,使用protobuf格式与设备端通讯,设备端采用stm32系列mcu,使用C语言开发,所以要生成protobuf C语言版协议库。 步骤: 1.准备 yum -y install install autoconf automake libtool yum -y install gcc gcc-c++ 2.安装protobuf protobuf版本地址: https://github.com/protocolbuffers/protobuf/releases ; 使用wget下载tar.gz包,tar -zxvf 解压; 在解压包中,运行./autogen.sh,然后./configure,make & make install 安装,当然 ./configure --prefix=/usr/local/protobuf 设置安装目录; 测试:protoc命令; 这时还不能生成c语言代码。 3.安装protobuf-c 设置环境变量:PKG_CONFIG_PATH=/usr/local/lib/pkgconfig,目录根据安装目录定义,这是未配置安装目录下的配置; protobuf-c版本地址: https://github.com/timesto/protobuf-c/releases ; 使用wget下载tar.gz包,tar

多人脸部\肢体\手部识别OpenPose安装

帅比萌擦擦* 提交于 2019-12-01 23:39:27
项目网址: https://github.com/CMU-Perceptual-Computing-Lab/openpose 项目需求: 操作系统: win7, win8, win10; ubuntu14.04, 16.04 cuda: 7.5, 8 cuDNN5.1 pose_face_hands.gif windows下的安装: OpenPose目前可以在Win7,Win8或者Win10下成功安装. 安装所需的库文件: 按照顺序安装VS2015 -> CUDA8 -> cuDNN5.1. 双击{openpose_path}\windows\download_3rdparty_and_models.bat 下载所需的依赖文件和模型。 双击{openpose_path}\windows\OpenPose.sln 右键选择VS2015打开工程文件. 尝试编译和执行demo: 右键单击 OpenPoseDemo --> Set as StartUp Project. 将VS2015工程模式从debug改为release. 按F5编译运行. 在编译之后,openpose会自动打开网络摄像头, 对拍摄到的图像进行识别. 在shell中执行exe文件(也就是在VS外执行exe),需要: 将所有{openpose_folder}\3rdparty\windows\caffe\bin

以 gpushare-device-plugin 为例,探究 Resource yaml 配置

蹲街弑〆低调 提交于 2019-12-01 16:57:02
1. 以 gpushare-device-plugin 为例,探究 Resource yaml 配置 1.1. Pod 结构体分析 1.1.1. type TypeMeta struct 1.1.2. type ObjectMeta struct 1.1.3. type PodSpec struct 1.1.3.1. type Volume struct 1.1.3.2. type VolumeSource struct 1.1.4. type Container struct 1.1.5. type PodStatus struct 1.2. DaemonSet 结构体 1.2.1. type DaemonSetSpec struct 1.2.2. type PodTemplateSpec struct 1.2.3. type DaemonSetStatus struct 1.3. 分析 gpushare-device-plugin 的 daemon 配置 1. 以 gpushare-device-plugin 为例,探究 Resource yaml 配置 我理解 k8s 中最核心的 resource 就是 Pod,创建 Pod 需要先生成 yaml 文件,然后通过 kubectl apply -f example-pod.yaml 来创建 pod。 k8s 中处理 pod

为什么需要“二次”解码器

浪尽此生 提交于 2019-12-01 16:05:38
参考文献:极客时间傅健老师的《Netty源码剖析与实战》Talk is cheap.show me the code!   上一篇随笔说了解决TCP粘包、半包的一次解码器都是继承的 ByteToMessageDecoder ,而 ByteToMessageDecoder 主要是将原始数据流(可能存在粘包、半包问题的数据流)转换为用户数据(是一个字节数组)。所以我们需要二次解码器(都是直接继承 MessageToMessageDecoder )将字节数组转换成Java对象。    有人会问能否将两次解码合二为一?这里是不建议的,首先没有分层感,不够清晰,其次就是耦合性太高,Java是最忌讳耦合性高的方案的。 常用的“二次”编解码方式有哪些?    Java序列化(占空间,其他语言不支持),Marshaling,XML(也是占用比较大),JSON(比XML占空间小,但是没有XML那么通用性),MessagePack(比JSON占用空间还小,却没有它可读性好),Protobuf,其他... 如此多的编解码方式该如何选择呢?首先考虑到的是编码后占用空间,因为编解码的作用很大情况下是为了存储和传输。其次是编解码的速度,再一个就是是否追求可读性,最后一个就是多语言支持,例如MessagePack。综上所述比较合适的有JSON,MessagePack和Protobuf

.NET Core ❤ gRPC

只愿长相守 提交于 2019-12-01 15:05:19
这篇内容主要来自Microsoft .NET团队程序经理Sourabh Shirhatti的博客文章: https://grpc.io/blog/grpc-on-dotnetcore/ , .NET Core 3.0现已提供grpc的.NET 托管实现 grpc-dotnet, gRpc 取代WCF成为 .NET的一等公民。自2018年11月以来,Microsoft的.NET团队一直与gRPC团队密切合作,共同开发适用于.NET Core的gRPC的全新完全托管实现。 gRpc 有非常多的公司在使用,比如 Salesforce,Netflix,Spotify,Fanatics等公司(当然还有Google),特别是整个CNCF 主导下的云原生应用开发生态里gRpc 有着举足轻重的地位。 .NET目前有两种正式的gRPC实现: Grpc.Core :基于本地gRpc Core库的原生 gRpc C#实现,支持.NET Core 2.1/.NET Framework 4.5+/Mono 4+ 。 grpc-dotnet :完全以C#编写的新实现,没有任何本机依赖性,并且基于最新发布的.NET Core 3.0。 这两种实现并排共存,并且在可用功能,集成,支持的平台,成熟度和性能方面各有各的优势。两种实现共享用于调用和处理RPC的相同API,用户能够选择最能满足其需求的实现

序列化和反序列化浅析

杀马特。学长 韩版系。学妹 提交于 2019-12-01 12:36:25
简介 序列化和反序列化对于现代的程序员来说是一个既熟悉又陌生的概念。说熟悉是因为几乎每个程序员在工作中都直接或间接的使用过它,说陌生是因为大多数程序员对序列化和反序列化的认识仅仅停留在比较一下各种不同实现的序列化的性能上面,而很少有程序员对序列化和反序列化的设计和实现有深入的研究。 本文将从序列化和反序列化的设计和实现的入手,来简单讲解一下序列化和反序列化。其中包括以下几个方面: 序列化和反序列化的作用 什么样的数据是可序列化的 序列化和反序列化的分类 序列化和反序列化的类型映射 本文不会涉及到某几种语言的某几种序列化实现的性能对比之类的内容。 序列化和反序列化的作用 我们在编写程序代码时,通常会定义一些常量和变量,然后再写一堆操作它们的指令。不管是变量还是常量,它们表示的都是数据。所以简单的说,一个程序就是一堆指令操作一堆数据。 但是为了更有效的管理这堆数据,现代的程序设计语言都会引入一个类型系统来对这些数据进行分类管理,而不是让程序员把所有数据都一股脑的当做二进制串来进行操作。 比如一个常量可能是一个数字,一个布尔值,一个字符串,或者是一个由它们构成的数组。而变量通常具有更丰富的类型可以使用。甚至你还可以自定义类型。对于面向对象的语言来说,一个类型表示的不仅仅是数据本身,还包括了对这种类型数据的一组操作。 一个程序可以以源码或者可执行的二进制形式保存在磁盘(或者其它存储介质)上

游戏服务器和Web服务器的区别

帅比萌擦擦* 提交于 2019-12-01 09:55:57
用Go语言写游戏服务器也有一个多月了,也能够明显的感受到两者的区别。这篇文章就是想具体的聊聊其中的区别。当然,在了解区别之间,我们先简单的了解一下Go语言本身。 1. Go语言的特点 Go语言跟其他的语言例如Java比起来,算得上一门很年轻的语言。Go语言是由Robert Griesemer、Rob Pike和Ken Thompson于2007年在Google开发。并于2009年正式发布。 Go语言的设计理念围绕着简洁这两个字,认为少即是多。如果你熟悉Java,用Java那一套语法命名跟Go做对比,可以很明显的体会到这种感觉。 Go的特点可以简单的概括成以下几个点。 1.1 静态类型和编译型 首先Go是静态类型,静态类型就是编译时就知道每一个变量的类型,得益于此,在编译的阶段就能够发现很多问题。而如果是动态语言,例如JavaScript,有些问题直到运行时才能发现。 Go是编译型语言,看到编译型大家脑子里可能会想到另外一个词解释型。两者的区别从字面上来理解其实已经可以看出来,我用一个简单的例子来类比一下。 编译型 去餐馆吃饭,点了菜之后,饭店会等所有的菜做好了再上 解释型 去餐馆吃饭,点了菜之后,陆陆续续的边吃边上 1.2 跨平台 顾名思义,你写的Go源码在所有的系统都能够运行。 这点其实很好理解,例如Java的口号是"Write once, run anywhere"

ProtoBuf 源码简析

て烟熏妆下的殇ゞ 提交于 2019-12-01 02:07:04
ProtoBuf项目描述:   Google Protocol Buffer简称protobuf,为高效的二进制序列化/反序列化协议(一般为google内部使用),不同于xml、json等,其更小巧、高效;avro、thrift等; 其可用于网络协议、数据存储等语言无关、平台无关、可扩展的序列化结构数据格式。只要按照特定条件可支持向前、向后兼容;目前提供了C++、Java、Python 三种语言的 API,这样各语言可以相互序列化和反序列化数据信息(事实上也可以自定义实现其他语言的API接口)。 在使用中,用户可根据自定义或引入数据结构(Message)文件*.proto;此后通过编译器protoc.exe编译该描述文件为指定语言的操作接口,而后将产生的操作接口文件 和libprotobuf.lib添加入项目中进行数据序列化和反序列化操作即可,产生的序列化后的信息可读性很差,此外反序列化也必须知道对应的数据结构描述文件*.proto, 否则无法正确地反序列化,也不再有意义,相对xml,json无法直接插入或修改数据信息内容; 以下仅对C++相关进行分析; 项目工程: gtest:google 白盒测试开源项目,主要用于单元测试,后面的gtest_main、tests项目; gtest_main:简单的对main函数以及testing::InitGoogleTest(&argc,