.proto 是什么文件
proto译为原的意思,那么proto 文件就是源文件了
java中.proto文件怎么用
用cd命令打开文件所在目录,例如文件在E:\tools\Computer\protoc-2.5.0-win32下 cmd命令:e:E:\>cd tools
mac怎么执行.proto文件
在网络程序的调试过程中,经常发生一些出乎意料的事情,比如创建一个TCP服务失败,这时候往往需要查看系统的网络情况,最常用的网络抓包当然非WireShark模式。但往往很多时候只需要查看某个端口的使用情况,它到底被那个进程(对应PID)占用了,或者你还需要把它Kill掉。如果你在Windows操作系统,你可以使用netstat命令来查询PID,然后可以打开任务管理器,查看这个PID对应的进程名;如果PID没有显示,菜单》查看》选择列》选中PID即可;得知进程后,我们可以将进程杀掉。下面我简单描述一下我所了解的在Windows和Linux系统下处理方式。(假如我们需要确定谁占用了我们的9010端口)1、Windows平台在windows控制台窗口下执行:netstat-nao|findstr9010TCP127.0.0.1:90100.0.0.0:0LISTENING3017你看到是PID为3017的进程占用了9010端口,如果进一步你想知道它的进程名称,你可以使用如下命令:tasklist|findstr3017如果你想杀死这个进程,你当然可以用前面描述的那种方法,在任务管理器里把它KILL了,但如果你喜欢高效一点,那么用taskkill命令就可以了。taskkill/pid3017那么这个进程就灰灰湮灭了:)2、Linux如果你是个Linux爱好者,那个这个命令你应该很熟了,netstat-pan|grep…
protobuf import路径怎么写
Protobuf语言指南
l 定义一个消息(message)类型
l 标量值类型
l Optional 的字段及默认值
l 枚举
l 使用其他消息类型
l 嵌套类型
l 更新一个消息类型
l 扩展
l 包(package)
l 定义服务(service)
l 选项(option)
l 生成访问类
本指南描述了怎样使用protocolbuffer语言来构造你的protocol buffer数据,包括.proto文件语法以及怎样生成.proto文件的数据访问类。
本文是一个参考指南——如果要查看如何使用本文中描述的多个特性的循序渐进的例子,请在
l 定义一个消息类型
先来看一个非常简单的例子。假设你想定义一个“搜索请求”的消息格式,每一个请求含有一个查询字符串、你感兴趣的查询结果所在的页数,以及每一页多少条查询结果。可以采用如下的方式来定义消息类型的.proto文件了:
怎么用.proto文件生成.php文件
file_put_contents(‘D:/a.php’,$data); //$data 是文件内容.详细的我也解答不清,后盾人有教学视频,非常详细的教学视频,最近活动还有实训班
linux 和windows 的protoc生成的proto文件不同吗
当前版本为2.3.0,下载两个压缩包:protoc-2.3.0-win32.zip和protobuf-2.3.0.zip,前者是protobuf的编译器,后者包含了有三程序语言的开发包。 2.解压 首先解压protoc-2.3.0-win32.zip,把protoc.exe文件放到path路径中,最简单的做法就是把这个…
protobuf 生成的变量会不会自动销毁
要看具体变量的类型,看个例子吧:
在网络游戏中,游戏玩家之间的同步是一个最基本的功能,而同步是通过对坐标的广播进行的,因此我们假设一个简单的模型,当一个玩家的位置发生变化时,将玩家的新位置发给地图内所有玩家,根据这个情况写出以下proto文件。
message PlayerPos{
required uint32 playerID = 1;
required float posX = 2 ;
required float posY = 3 ;
}
这样就有一个问题,现在的游戏都是3D游戏,因此需要xyz来表示位置,还需要另一组xyz来表示朝向,如果用简单变量的话就会显的很乱,而且无论是位置还是朝向其实都是一组xyz,因此可以将xyz抽出来成为一个复合数据类型,单独放在一个文件中。这样就构成以下文件。
file vector.proto
message vector3D{
required float x = 1;
required float y = 2;
required float z = 3;
};
file Player.proto
import “vector.proto”;
message PlayerPos {
required uint32 playerID = 1;
required vector3D pos = 2;
};
编译的时候先编译vector文件,采用import时需要注意路径,本例中两文件在同一目录下。
protoc –cpp_out=. vector.proto Player.proto
proto对应的文件已经生成了,但是该怎么赋值呢,查API查了半天有点不知所以,干脆来看生成的类文件的源代码吧
// required uint32 playerID = 1;
inline bool has_playerid() const;
inline void clear_playerid();
static const int kPlayerIDFieldNumber = 1;
inline ::google::protobuf::uint32 playerid() const;
inline void set_playerid(::google::protobuf::uint32 value);
// required .vector3D pos = 2;
inline bool has_pos() const;
inline void clear_pos();
static const int kPosFieldNumber = 2;
inline const ::vector3D& pos() const;
inline ::vector3D* mutable_pos();
inline ::vector3D* release_pos();
inline void set_allocated_pos(::vector3D* pos);
上面列出了生成的部分源代码,主要是PlayerPos的操作变量的函数,第一个playID很简单,可以看到直接使用set_playerid ( ) 即可,但是对于嵌套的pos 发现没有对应的set_pos方法,不过发现了一个set_allocated_pos() 函数,这个函数也是set开头的,看看这个函数是干嘛的。
inline void PlayerPos::set_allocated_pos(::vector3D* pos) {
delete pos_;
pos_ = pos;
if (pos) {
set_has_pos();
} else {
clear_has_pos();
}
}
看上去可以赋值,直接调用set_allocated_pos() 进行赋值看一看
PlayerPos player;
vector3D tmp;
tmp.x = 1;
tmp.y = 2;
tmp.z = 3;
player.set_allocated_pos(&tmp)
编译没问题,但是运行时出现错误,而且是很奇怪的错误,仔细了查看一下PlayerPos的源码,发现一个问题
::vector3D* pos_;
::google::protobuf::uint32 playerid_;
上面是PlayerPos中变量的保存形式,发现pos是作为一个指针存储的,如果按照之前的赋值 tmp 是一个局部变量,函数返回时局部变量自动销毁,而pos_保存的仍然是已被销毁的tmp的位置,因此会出错,如果采用new的话就可以解决这个问题,即赋值方法如下
PlayerPos player;
vector3D *tmp = new Vector3D;
tmp->x = 1;
tmp->y = 2;
tmp->z = 3;
player.set_allocated_pos(tmp)
这样即可,编译运行都没有问题。
如此之外,还有一种赋值方法,就是调用mutable_pos()
inline ::vector3D* PlayerPos::mutable_pos() {
set_has_pos();
if (pos_ == NULL) pos_ = new ::vector3D;
return pos_;
}
mutable_pos () 中自己new出了一个vector3D 对象,而vector3D中又实现了赋值的重载,因此可以这样解决
PlayerPos player;
vector3D *tmp = player.mutable_pos();
tmp->x = 1;
tmp->y = 2;
tmp->z = 3;
idea 安装protobuf后 proto文件怎么生成java文件
idea 安装protobuf后 proto文件怎么生成java文件 ProtoBuf java 包编译 ProtoBuf的官方下载包并不包含jar文件,需要用户自己configure/make….来自行编译.由于Windows上没有编译环境,就用了一个笨一点方法处理了. 分别下载: protobuf-2.4.1.zip ProtoBuf的源文件
Protobuf的proto文件解析parse用的是什么算法
看起来是典型的带lookahead的递归下降(recursive descent).没啥特别的.proto语言的文档在:Language Guide C++版的parser在:protobuf/parser.cc at master · google/protobuf · GitHub
如何用eclipse编译运行protobuf文件
protobuf-2.4.1.zip ProtoBuf的源文件(包含了C++/Java/Python)的源文件 protoc-2.4.1-win32.zip 已经编译过的用于Windows平台的protoc命令(该命令用于将.proto文件转化为Java或C++源文件).