从BIO、NIO聊到 Netty,还要手写一个RPC框架 毕设/项目经验稳了

本文从传统的BIO模型出发,讲解了Java网络编程的基础,包括Socket通信流程和资源消耗问题。接着介绍了Java NIO的原理和优势,如非阻塞I/O、Channel、Buffer和Selector等核心组件。最后,讨论了Netty框架如何简化NIO编程,提高性能和稳定性,并列举了Netty在RPC、HTTP服务器、即时通讯和消息推送等场景的应用。
摘要由CSDN通过智能技术生成

老套路,学习某一门技术或者框架的时候,第一步当然是要了解下面这几样东西。

是什么?有哪些特点?有哪些应用场景?有哪些成功使用的案例?…为了让你更好地了解 Netty 以及它诞生的原因,先从传统的网络编程说起吧!

还是要从 BIO 说起

传统的阻塞式通信流程

早期的 Java 网络相关的 API(java.net包) 使用 Socket(套接字)进行网络通信,不过只支持阻塞函数使用。

要通过互联网进行通信,至少需要一对套接字:

运行于服务器端的 Server Socket。运行于客户机端的 Client SocketSocket 网络通信过程如下图所示:

image.png

Socket 网络通信过程简单来说分为下面 4 步:

建立服务端并且监听客户端请求客户端请求,服务端和客户端建立连接两端之间可以传递数据关闭资源对应到服务端和客户端的话,是下面这样的。

服务器端:

创建 ServerSocket 对象并且绑定地址(ip)和端口号(port):server.bind(new InetSocketAddress(host, port))通过 accept()方法监听客户端请求连接建立后,通过输入流读取客户端发送的请求信息通过输出流向客户端发送响应信息关闭相关资源客户端:

创建Socket 对象并且连接指定的服务器的地址(ip)和端口号(port):socket.connect(inetSocketAddress)连接建立后,通过输出流向服务器端发送请求信息通过输入流获取服务器响应的信息关闭相关资源一个简单的 demo

为了便于理解,我写了一个简单的代码帮助各位老铁理解一下。

服务端:

public class HelloServer {
private static final Logger logger = LoggerFactory.getLogger(HelloServer.class); public void start(int port)
{
//1.创建 ServerSocket 对象并且绑定一个端口 try (ServerSocket server = new ServerSocket(port)😉
{
Socket socket; //2.通过 accept()方法监听客户端请求, 这个方法会一直阻塞到有一个连接建立
while ((socket = server.accept()) != null)
{
logger.info(“client connected”);
try (ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream()))
{
//3.通过输入流读取客户端发送的请求信息 Message
message = (Message) objectInputStream.readObject();
logger.info(“server receive message:” + message.getContent());
message.setContent(“new content”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值