下面的内容是,我最近几个月工作遇到的零散的技术和知识点的汇聚,定期整理归类繁杂的知识,有利于形成知识的结构化。
目录:
- git相关
- protobuf协议
- make构建
git相关
git子模块
允许git仓库做为另一个git仓库的子目录,同时保持自己的独立提交
# 添加子模块,同时会创建.gitmodules保存仓库子模块的映射信息
git submodule add [url]
# clone含有子模块的项目后拉取子模块代码
git clone [url]
git submodule init
git submodule update
# 加入--recursive 同等于上面
git clone --recursive [url]
# 在子模块上更新代码
git fetch
git merge origin/master
# 在主项目中执行下面命令同等于上面操作,缺少[submodule name]默认更新所有子模块
git submodule update --remote [submodule name]
# 在主项目看到子模块的提交日志
git log -p --submodule
git子模块:git-scm.com/book/zh/v2/… 业界文档:juejin.cn/post/684490…
git-diff命令
# 显示更改文件数
git diff COMMIT COMMIT --shortstat
#显示更改的文件名
--name-status
# 筛选文件
# 合并后对比一些特定文件的情况下,这条命令尤为重要,后买可以接对多个文件名,用vscode的diff插件还要一个一个文件检查
# 假如合并文件有几百个,工作量是艰巨的,可以写个shell脚本处理对比结果,写进txt文件
# 我最近就有个这样的需求,幸好有这条命令
git diff COMMIT COMMIT *.lua *.js
# 筛选具体目录下的目标文件,注意path从当前目录起始
git diff COMMIT COMMIT path/to/target
# 版本信息
git show COMMIT
protobuf协议
游戏中的数据通讯协议主要是Protobuf+socket,只有登录时拿到ID和session或token用到了http协议。对于数据响应要求高、低延迟甚至实时的应用程序,像游戏、直播、即时聊天,一般都会用到protobuf作为数据结构化和序列化的协议。
定义
Protobuf全称Protocol Buffer,是google内部广泛使用的结构化数据存储、数据序列化的协议。下面是google官方给出的定义: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
优势
首先从定义上,可以看到一个描述protobuf的关键字:方便高效。
- proobuf的语法比xml简洁方便
拿常见的数据序列化协议Json,xml与protobuf做对比:
.proto
package lm;
message helloworld
{
required int32 id = 1; // ID
required string str = 2; // str
}
.xml
<?xml version="1.0" encoding="UTF-8"?>
<helloword>
<id>1</id>
<str>helloworld</str>
</note>
- protobuf是二进制协议,比同为文本协议的json和xml的读写操作都要高效,快捷。 文本协议要读进内存,会被解析成二进制,而pb属于二进制协议,所以相对文本协议解析速度更快。
官方针对protobuf的性能将其更各种数据协议做了测试比较,下图是通过各个协议对一个对象操作的时间--Total time,包括创建对象、将对象序列化为内存中的字节序列,然后再反序列化的过程。
protobuf性能测试报告:code.google.com/archive/p/t…
- protobuf协议更小
各协议的字节码大小对比:
- protobuf与平台无关,与语言无关,所以兼容性更好
java中使用json和xml数据结构,使用使用相应的包支持的,jackson(java的标准json库)和javolution xmlformat(javolution库中格式化xml的API)。 而protobuf可以通过编译器将描述数据结构的.proto文件编译成各种目标语言,github仓库上标有目标语言有:c++、java、c#、JavaScript、Ruby、Go、PHP、Dart、Objective-C。
make构建
make是一个常用的构建工具,多用于C语言项目,但在一些大型的项目中使用频率也比较高。
假如一个工程里有个makefile文件,往往都需要用到make命令来构建。
详细介绍:
www.ruanyifeng.com/blog/2015/0…
如何用make来构建node.js项目
www.ruanyifeng.com/blog/2015/0…
windows下使用make命令安装教程
下载MinGW:sourceforge.net/projects/mi…
下载后假如没在bin下找make.exe,可以到MinGW instanllation manager中找到下载MinGW-make.exe,勾选包然后到左上角点击apply change下载(记得把MinGW-make改名成make)。最好把basic setup都下了。
最后记得手动添加环境变量:path/to/MinGW/bin,就可以使用了。