grpc-简单的客户端服务端通信(1)
来源:互联网 发布:win7管理网络密码 编辑:程序博客网 时间:2024/05/21 09:37
服务端业务逻辑代码
实现自己的业务逻辑类去继承grpc自动生成的类:
public class StudentServiceImpl extends StudentServiceGrpc.StudentServiceImplBase { @Override public void getRealNameByUsername(MyRequest request, StreamObserver<MyResponse> responseObserver) { System.out.println("接受到客户端信息: " + request.getUsername()); responseObserver.onNext(MyResponse.newBuilder().setRealname("张三").build()); responseObserver.onCompleted(); }}
可见返回的是void,所以需要返回的消息内容一定是由responseOberver来实现的。这单是跟thrift不同的地方。
onNext:把结果返回给客户端(考虑到会有stream情况)
onCompleted:告知客户端服务端,服务端已执行完毕
启动服务端
- 启动服务端
private void start() throws Exception{ this.server = ServerBuilder.forPort(8899).addService(new StudentServiceImpl()).build().start(); System.out.println("server started!"); Runtime.getRuntime().addShutdownHook(new Thread(() -> { System.out.println("关闭jvm"); GrpcServer.this.stop(); })); System.out.println("执行到这里"); }
- 停止服务端
private void stop() { if (null != this.server) { this.server.shutdown(); } }
- 让服务器等待(否则启动完就会退出)
private void awaitTermination() throws InterruptedException { if (null != this.server){ this.server.awaitTermination(); } }
- 执行
public static void main(String[] args) throws Exception{ GrpcServer server = new GrpcServer(); server.start(); server.awaitTermination(); }
启动客户端
public static void main(String[] args) { ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 8899).usePlaintext(true).build(); StudentServiceGrpc.StudentServiceBlockingStub blockingStub = StudentServiceGrpc.newBlockingStub(managedChannel); MyResponse myResponse = blockingStub.getRealNameByUsername(MyRequest.newBuilder().setUsername("张三").build()); System.out.println(myResponse.getRealname()); }
关键点
awaitTermination:等待服务器终止,可以传入时间参数来让服务器到达时间后terminate.
底层实现:
@Override public void awaitTermination() throws InterruptedException { synchronized (lock) { while (!terminated) { lock.wait(); } } }
Runtime:每一个java应用都会有一个单例Runtime对象,应用可以通过此对象获取应用环境的信息
addShutdownHook:回调钩子,虚拟机被关闭之前执行的方法
服务端与客户端建立的是一个tcp连接,是一个长连接,而不会像http一样客户端每次请求都需要建立一个新的连接,但是会通会过心跳检测这个连接是否有效。
参考 https://grpc.io/docs/tutorials/basic/java.html
阅读全文
0 0
- grpc-简单的客户端服务端通信(1)
- 简单的客户端,服务端通信
- golang grpc服务端客户端简单源码实现
- grpc(3):使用 golang 开发 grpc 服务端和客户端
- 简单的Socket通信客户端和服务端
- 客户端和服务端通信的简单小案列
- 简单的服务端与客户端通信代码
- 使用简单的ServiceSockt实现服务端与客户端的通信
- C# SOCKET编写的简单聊天通信程序(客户端+服务端)
- Java简单实现UDP服务端和客户端的通信
- Socket TCP 协议实现服务端和客户端的简单通信
- nodejs socket实现的服务端和客户端简单通信
- JAVA 服务端和客户端Socket通信的简单例子
- socket ( java ) 简单多个客户端、服务端通信(多线程)
- socket ( java ) 简单多个客户端、服务端通信(多线程)
- GoodZhang在学Python(十二)--简单客户端、服务端socket通信
- Java中利用socket实现简单的服务端与客户端的通信(入门级)
- Java中利用socket实现简单的服务端与客户端的通信(基础级)
- Liunx用户与组
- PAT甲级 1035 -- 没有注释
- 剑指offer之变态跳台阶
- nosql简记
- Android开发 之 补间动画
- grpc-简单的客户端服务端通信(1)
- 【(类似DP)优化】 分梨子
- java面向对象的三大特征:封装-继承-多态
- 【 用漫画图解贝叶斯公式】-- 我家狗叫的时候,是不是有小偷进门了?告诉我。
- origion绘制热图
- PAT甲级 1036 -- 没有注释
- GoldenDict和AutoHotKey的安装和使用
- PAT(Basic Level)_1003_我要通过!
- shiny搭建网站填坑战略