netty4客户端连接多个不同的服务端

本文介绍如何使用Netty4框架构建一个客户端,实现与多个不同服务端的稳定连接。内容涵盖Netty的基础概念、客户端配置以及并发连接的管理策略。
摘要由CSDN通过智能技术生成
package com.tcp.server;

import com.tcp.protobuf.NettyClientInitializer;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.handler.codec.LengthFieldPrepender;
import io.netty.handler.timeout.IdleStateHandler;
import org.springframework.stereotype.Component;

import java.net.InetSocketAddress;
import java.util.*;
import java.util.concurrent.TimeUnit;

@Component
public class TcpManyClient {
    //多个tcp服务器的端口
    private static List<Integer> PORTS = Arrays.asList(20000, 20001, 20002, 20003, 20004);
    //多个tcp服务器的ip
    private static List<String> HOSTS = Arrays.asList("127.0.0.1", "127.0.0.1", "127.0.0.1", "127.0.0.1", "127.0.0.1");
    public static Map<Integer, ChannelFuture> channels = getChannel(HOSTS, PORTS);

    /**
     * 初始化Bootstrap
     */
    public static final Bootstrap getBootstrap(EventLoopGroup group) {
        if (null == group) {
            group = new NioEventLoopGroup();
        }
        Bootstrap bootstrap = new Bootstrap();
        bootstrap.group(group).channel(NioSocketChannel.class)
                .option(ChannelOption.TCP_NODELAY, true)
                .option(ChannelOption.SO_KEEPALIVE, true);
        bootstrap.handler(new ChannelInitializer<Channel>() {
            @Override
            protected void initChannel(Channel ch) throws Exception {
                ChannelPipeline pipeline = ch.pipeline();
                // 添加自定义协议的编解码工具
                pipeline.addLast(new IdleStateHandler(0, 30, 0, TimeUnit.SECONDS));
                ch.pipeline().addLast(new SmartCarEncoder());
                ch.pipeline().addLast(new SmartCarDecoder());
                pipeline.addLast(new TcpClientHandler());
            }
        });
        return bootstrap;
    }

    //   获取所有连接
    public static final Map<Integer, ChannelFuture> getChannel(List<String> hosts, List<Integer> ports) {
        Map<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非ban必选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值