netty 既当服务端又当客户端_java 从零实现 RPC(一)服务端与客户端启动

本文介绍了如何使用Netty从零开始实现RPC服务端和客户端。首先回顾了之前学习的RPC框架知识,然后讲解了Netty的基础,包括服务端的maven依赖、核心代码和Handler实现,接着介绍了客户端的依赖、核心实现和Handler。通过逐步的代码演示,展示了如何启动服务端和客户端,并强调了Netty在隐藏网络通信细节方面的优势。
摘要由CSDN通过智能技术生成

回顾

大家好,我是老马。

我们前面学习了 5 分钟入门 spring cloud 实战笔记 和 dubbo 2.7 的 3种入门案例实战,
小伙伴肯定已经有了最基本的认识。

工作使用过 rpc 框架的肯定也觉得 so easy,那后面我们就来一起从零实现属于自己的 rpc 框架。

懂得原理,以后哪怕遇到 GRPC 之类的,上手都会变得简单很多。

29d36bb388b31f64e6bf95a042835a96.png

知识储备

建议学习的小伙伴有扎实的 java 基础,最好有一定的 rpc 框架使用经验。

建议的基础储备如下:

Java 并发实战学习

TCP/IP 协议学习笔记

Netty 权威指南学习

为了便于大家理解,这个系列采用渐进式开发,希望每一位小伙伴都可以看懂。

let's go!

服务端的启动

maven 依赖

这里网络包我们使用成熟的 netty,后续有时间将对 netty 进行一下深入学习,此处不做展开。

    io.netty    netty-all    4.1.17.Final

其实最基础的实现也可以从 java 的 socket 开始,不过原理的是类似的,netty 在网络通信方面做了很多封装和改良,我们要学会站在巨人的肩膀上。

c214ecc68bfa6997aeb6d67f92bd16e8.png

服务端核心代码

基于 netty 的服务端,整体部分是固定的,不要求大家死记硬背。

package com.github.houbb.rpc.server.core;import com.github.houbb.log.integration.core.Log;import com.github.houbb.log.integration.core.LogFactory;import com.github.houbb.rpc.server.constant.RpcServerConst;import com.github.houbb.rpc.server.handler.RpcServerHandler;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioServerSocketChannel;/** * rpc 服务端 * @author binbin.h
Java中可以使用多种框架实现RPC客户端服务端,以下是一些常用的框架: 1. Apache Dubbo:Apache Dubbo是一种高性能、轻量级的Java RPC框架,支持服务治理和多种协议,如Dubbo协议、REST协议等。 2. Spring Cloud:Spring Cloud是一个基于Spring Boot的微服务框架,提供了丰富的服务治理功能,包括服务注册、发现、路由、负载均衡等。 3. gRPC:gRPC是Google开源的高性能、跨语言的RPC框架,使用Protocol Buffers作为序列化协议,支持多种语言,包括Java。 以下是一个使用Java实现RPC客户端服务端的基本步骤: 1. 定义RPC接口:在服务端客户端都需要定义一个接口,用于描述RPC的服务。 2. 编写服务端实现实现RPC接口,并将其注册到RPC框架中,以便客户端能够调用。 3. 配置服务端:配置服务端的监听端口、协议等信息。 4. 编写客户端:创建一个RPC客户端对象,使用RPC框架提供的API来调用服务端的方法。 5. 配置客户端:配置客户端的连接信息,如服务端的IP地址、端口号、协议等。 6. 测试:启动服务端客户端,测试RPC调用是否成功。 以下是一个简单的示例代码: 1. 定义RPC接口 ```java public interface HelloService { public String sayHello(String name); } ``` 2. 编写服务端实现 ```java public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 3. 配置服务端 ```java public class Server { public static void main(String[] args) throws Exception { HelloService helloService = new HelloServiceImpl(); Server server = new NettyServer("localhost", 8888); server.registerService(helloService); server.start(); } } ``` 4. 编写客户端 ```java public class Client { public static void main(String[] args) throws Exception { Client client = new NettyClient("localhost", 8888); HelloService helloService = client.getProxy(HelloService.class); String result = helloService.sayHello("world"); System.out.println(result); } } ``` 5. 配置客户端 ```java public class NettyClient implements Client { private final String host; private final int port; private final EventLoopGroup group; public NettyClient(String host, int port) { this.host = host; this.port = port; this.group = new NioEventLoopGroup(); } @Override public <T> T getProxy(Class<T> clazz) { return (T) Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, new RpcInvocationHandler(host, port, group)); } } ``` 6. 测试 启动服务端客户端,运行Client的main方法,输出结果为:Hello, world。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值