Netty
概述:
Netty
是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务端和客户端。Netty
封装了JDK
的NIO
。
如何启动客户端连接到服务端?
引入Maven
依赖:
<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.49.Final</version> </dependency>
创建客户端代码,连接Netty
服务端,并向服务端发送数据:
// 1.创建客户端的启动类: new Bootstrap() // 2.指定EventLoop事件轮询器分组: .group(new NioEventLoopGroup()) // 3.指定SocketChannel通道实现: .channel(NioSocketChannel.class) // 4.添加处理器: .handler(new ChannelInitializer<NioSocketChannel>() { // 连接建立完成之后被调用: @Override protected void initChannel(NioSocketChannel nioSocketChannel) throws Exception { nioSocketChannel.pipeline().addLast(new StringEncoder()); } }) // 5.连接到服务器: .connect("localhost", 8080) // 指定阻塞方法,直到连接建立完成 .sync() // 获取连接对象,通过连接对象发送数据 .channel() // 6.向服务端发送数据: .writeAndFlush("hell,Netty!");
在上述代码中,需要替换YourClientHandler
为你自己定义的处理器,该处理器将处理接收到的数据。可以通过继承ChannelInboundHandlerAdapter
类并重写相应的方法来实现自己的处理器。
- 创建 EventLoopGroup: 在客户端中,你需要创建两个 EventLoopGroup 实例,一个用于处理客户端的连接,另一个用于处理I/O操作。EventLoopGroup 是一个处理事件循环的线程池。通常,NioEventLoopGroup 是用于客户端的良好选择。
EventLoopGroup group = new NioEventLoopGroup();
- 创建 Bootstrap:Bootstrap 类被用于设置客户端。你需要配置它以指定使用的 EventLoopGroup、通道类型、连接选项等。
Bootstrap bootstrap = new Bootstrap(); bootstrap.group(group) .channel(NioSocketChannel.class) .option(ChannelOption.TCP_NODELAY, true) .handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) { // 添加客户端处理器 ch.pipeline().addLast(new YourClientHandler()); } });
- 连接到服务端: 使用 connect 方法连接到远程服务器。
ChannelFuture future = bootstrap.connect(serverHost, serverPort).sync();
这将返回一个 ChannelFuture 对象,它表示连接的异步操作。通过调用 sync() 方法,你可以阻塞直到连接完成。
- 等待连接关闭: 使用 closeFuture().sync() 来阻塞,直到连接关闭。
future.channel().closeFuture().sync();
- 释放资源: 在关闭应用程序之前,确保关闭 EventLoopGroup 以释放所有资源。
group.shutdownGracefully();