1、下载安装protoc ,本人使用3.6.1版本
https://github.com/protocolbuffers/protobuf/releases
下载protoc,选择对应的操作系统
2、user.proto文件内容如下
syntax ="proto3";
// 生成的包名
option java_package="com.pancm.protobuf";
//生成的java名 java类名不要和proto文件名一样
option java_outer_classname ="UserInfo";
message UserMsg {
// ID
int32 id =1;
// 姓名
string name =2;
// 年龄
int32 age =3;
// 状态
int32 state =4;
}
3、netty server端和client端pom文件都添加 protobuf依赖
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>1.15.1</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.15.1</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.15.1</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.6.1</version>
</dependency>
4、netty 服务端和客户端pom文件在build标签添加
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.5.0.Final</version>
</extension>
</extensions>
5、netty 服务端和客户端pom文件添加 plugin
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.1</version>
<configuration>
<!-- protoc 安装目录-->
<protocExecutable>E:\protoc-3.6.1-win32\bin\protoc.exe</protocExecutable>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
6、netty服务端编译安装,生成UserInfo.java
7、netty服务端实现
package com.tcp.protobuf;
import com.pancm.protobuf.UserInfo;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.protobuf.ProtobufDecoder;
import io.netty.handler.codec.protobuf.ProtobufEncoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender;
import io.netty.handler.timeout.IdleStateHandler;
import java.util.concurrent.TimeUnit;
public class TcpServerProto {
private static final String IP = "127.0.0.1";
private static final int PORT = 9999;
/**
* 用于分配处理业务线程的线程组个数
*/
protected static final int BIZGROUPSIZE = Runt