🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> anoyi中的GrpcServer 1. 查看属性 ~~~ private final GrpcProperties grpcProperties; private final CommonService commonService; private ServerInterceptor serverInterceptor; private Server server; ~~~ grpcProperties是服务端的属性,包含端口,CommonService 是继承了proto协议生成CommonServiceGrpc的CommonServiceImplBase这个类,并重写了handle这个接收请求的方法,实现基层通讯,serverInterceptor是拦截器,也就是token,令牌等的使用,Server是grpc的类,是服务端的基础请求封装 2. 构造方法(自己看) ~~~ public GrpcServer(GrpcProperties grpcProperties, CommonService commonService) { this.grpcProperties = grpcProperties; this.commonService = commonService; } public GrpcServer(GrpcProperties grpcProperties, CommonService commonService, ServerInterceptor serverInterceptor) { this.grpcProperties = grpcProperties; this.commonService = commonService; this.serverInterceptor = serverInterceptor; } ~~~ 3. 重要方法 ~~~ /** * 启动服务 * @throws Exception 异常 */ public void start() throws Exception{ int port = grpcProperties.getPort(); if (serverInterceptor != null){ server = ServerBuilder.forPort(port).addService(ServerInterceptors.intercept(commonService, serverInterceptor)).build().start(); }else { Class clazz = grpcProperties.getServerInterceptor(); if (clazz == null){ server = ServerBuilder.forPort(port).addService(commonService).build().start(); }else { server = ServerBuilder.forPort(port).addService(ServerInterceptors.intercept(commonService, (ServerInterceptor) clazz.newInstance())).build().start(); } } log.info("gRPC Server started, listening on port " + server.getPort()); startDaemonAwaitThread(); } ~~~ ServerBuilder其实就是一个builder,ServerInterceptors可以把拦截器绑定到通道,接下来看看这个方法 ``` server = ServerBuilder.forPort(port).addService(ServerInterceptors.intercept(commonService, serverInterceptor)).build().start(); ``` 这个方法意思是绑定端口,绑定拦截器生成grpc的server,接下来看看startDaemonAwaitThread(); ~~~ private void startDaemonAwaitThread() { Thread awaitThread = new Thread(()->{ try { GrpcServer.this.server.awaitTermination(); } catch (InterruptedException e) { log.warn("gRPC server stopped." + e.getMessage()); } }); awaitThread.setDaemon(false); awaitThread.start(); } ~~~ 这个方法其实是绑定线程,启动服务端,这样grpc课程基本结束了,具体怎么样,自己去摸索,我会提供github代码 [https://github.com/ChinaSilence/spring-boot-starter-grpc](https://github.com/ChinaSilence/spring-boot-starter-grpc)