一、引入依赖
在上一篇文章,已经其实已经引入,我这里用的是Mac环境,但是实现的思想都是一样的,直接用idea就可以生成对象。
为什么要用Protobuf这个序列化工具,因为他更快,对比json这些快很多,数据传输的占很小的空间。
对比上一篇文章,增加了build,这下面两个都是必须的,重新加载之后,就出现相应插件😊。
这几个依赖是上一篇引用。
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>3.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.grpc/grpc-all -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-all</artifactId>
<version>1.11.0</version>
</dependency>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.6.2</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.0</version>
<configuration>
<protocArtifact>
com.google.protobuf:protoc:3.1.0:exe:${os.detected.classifier}
</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>
io.grpc:protoc-gen-grpc-java:1.11.0:exe:${os.detected.classifier}
</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
🤗如图所示,在引入依赖的项目下,就会出现插件,当然目前还不能使用这个插件,我们还没写Protobuf的代码,我们在proto下创建一个pro文件进行编写代码。
二、编写Protobuf代码
接下就是正题了,我们这里目前只写了登录需要的代码,我们后续在一步步添加代码。
Syntax 这说明是proto3版本,其他版本使用方法可以在百度看看。
package 是包名
其他都可以比作Java的对象,奇怪的是为啥message里面 有=1,=2、=3这些其实说顺序而已。
然后我们就可以用使用IDEA插件进行生成对象,生成的对象在target目录下。
syntax = "proto3";
package com.binglian;
/*
消息类型
*/
enum Type {
LOGIN_REQUEST = 0; // 登录请求
LOGIN_RESPONSE = 1; // 登录响应
}
/*
登录信息
*/
message LoginRequest {
string uid = 1; // 用户唯一id
string deviceId = 2; // 设备ID
string token = 3; // 用户token
uint32 platform = 4; // 客户端平台 windows、mac、android、ios、web
}
/*
登录响应
*/
message LoginResponse {
bool result = 1; // true表示发送成功,false表示发送失败
uint32 code = 2; // 错误码
string message = 3; // 错误信息
}
/*
可以把理解Java的对象,这个对象下还有
类型
登录请求的对象
登录响应的对象
*/
message Message {
Type type = 1; // 通用字段: 消息类型
uint64 serial_number = 2; // 通用字段:消息序列号
string session_id = 3; // 通用字段:会话id
LoginRequest loginRequest = 4; // 登录请求
LoginResponse loginResponse = 5; // 登录响应
}
生成的位置如下,就可以把对象放到我们的common下,其他模块都可以用到。