com.github.linyuzai.connection.loadbalance.netty.sample.NettySampleClient Maven / Gradle / Ivy
package com.github.linyuzai.connection.loadbalance.netty.sample;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.LineBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import java.util.function.Consumer;
@Getter
public class NettySampleClient {
private Channel channel;
@Setter
private Consumer consumer;
public void send(String msg) {
if (msg.endsWith("\n")) {
channel.writeAndFlush(msg);
} else {
channel.writeAndFlush(msg + "\n");
}
}
public void connect(String host, int port) throws InterruptedException {
EventLoopGroup worker = new NioEventLoopGroup();
try {
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(worker)
.channel(NioSocketChannel.class)
.option(ChannelOption.SO_KEEPALIVE, true)
.handler(new ChannelInitializer() {
@Override
protected void initChannel(@NonNull SocketChannel channel) {
ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast(new LineBasedFrameDecoder(1024));
pipeline.addLast(new StringEncoder());
pipeline.addLast(new StringDecoder());
pipeline.addLast(new ClientHandler());
}
});
ChannelFuture future = bootstrap.connect(host, port).sync();
future.channel().closeFuture().sync();
} finally {
worker.shutdownGracefully();
}
}
public class ClientHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
channel = ctx.channel();
}
@Override
public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) throws Exception {
if (consumer != null) {
consumer.accept(String.valueOf(msg));
}
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy