创建一个 Netty Client

来创建一个Netty Client!

NettyClient.java

客户端与服务端类似,也需要线程模型、IO模型以及处理逻辑。

拍摄于台湾省垦丁,于2015年最后一天。

微信公众号

王皓的GitHub:https://github.com/TenaciousDWang

来创建一个Netty Client!

NettyClient.java

客户端与服务端类似,也需要线程模型、IO模型以及处理逻辑。

对于bootstrap.connect方法,我们可以参照服务端的bind方法,抽取出来,当连接失败时,调用自身实现重新连接。

一般情况,失败后不会马上重连,且不可能无限重连,这里我们写一个最多重连五次,每次间隔时间1秒钟,2秒钟,4秒钟,8秒钟,随着尝试次数的增加,同时增加重新连接动作的时间间隔。

bootstrap对象有一个方法config() 这个方法返回的是 BootstrapConfig,他是对 Bootstrap 配置参数的抽象,然后 bootstrap.config().group() 返回的就是我们在一开始的时候配置的线程模型 workerGroup,调 workerGroup 的 schedule 方法即可实现定时任务逻辑。代码如下:

上篇服务端里的引导类ServerBootstrap自身会有一些方法,同理客户端里的Bootstrap引导类也是有自己方法的,类似于ServerBootstrap:

以上就是一个简单的Netty Client的实现过程。

 

使用Netty创建TCP客户端的实现方法如下: ### 1. 引入依赖 如果使用Maven,在`pom.xml`中添加Netty依赖: ```xml <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.78.Final</version> </dependency> ``` ### 2. 定义TCP连接实体类 ```java import lombok.Data; @Data class TcpConfig { private String ip; private Integer port; private boolean enableHeartbeat; private String reqMsg = "#QL "; private String resMsg; public String getIdWithPort() { return this.ip + ":" + this.port; } } ``` ### 3. 创建Netty客户端 ```java import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; public class NettyClient { private final String host; private final int port; public NettyClient(String host, int port) { this.host = host; this.port = port; } public void run() throws Exception { EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap b = new Bootstrap(); b.group(group) .channel(NioSocketChannel.class) .handler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new StringEncoder()); ch.pipeline().addLast(new StringDecoder()); ch.pipeline().addLast(new SimpleChannelInboundHandler<String>() { @Override protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception { System.out.println("Received from server: " + msg); } }); } }); ChannelFuture f = b.connect(host, port).sync(); Channel channel = f.channel(); channel.writeAndFlush("Hello, Server!"); channel.closeFuture().sync(); } finally { group.shutdownGracefully(); } } public static void main(String[] args) throws Exception { new NettyClient("127.0.0.1", 8080).run(); } } ``` ### 代码解释 - **引入依赖**:引入Netty的相关依赖,使得项目可以使用Netty的功能。 - **定义TCP连接实体类**:定义了一个`TcpConfig`类,用于存储TCP连接的相关配置信息,如IP、端口、是否开启心跳等[^2]。 - **创建Netty客户端**: - 创建`EventLoopGroup`,用于处理I/O操作。 - 创建`Bootstrap`,用于配置和启动客户端。 - 设置`Channel`类型为`NioSocketChannel`。 - 在`ChannelPipeline`中添加`StringEncoder`和`StringDecoder`,用于字符串的编码和解码。 - 添加自定义的`SimpleChannelInboundHandler`,用于处理接收到的消息。 - 连接到服务器,并发送消息。 - 等待连接关闭。 - 最后关闭`EventLoopGroup`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值