Netty实战(二):客户端启动流程

一个客户端启动的demo

public class NettyClient {
    public static void main(String[] args) {
        // 线程组
        NioEventLoopGroup workerGroup = new NioEventLoopGroup();
        // 客户端配置引导类
        Bootstrap bootstrap = new Bootstrap();
        bootstrap
            // 1.指定线程组
            .group(workerGroup)
            // 2.指定 IO 类型为 NIO
            .channel(NioSocketChannel.class)
            // 3.IO 处理逻辑
            .handler(new ChannelInitializer() {
                @Override
                public void initChannel(SocketChannel ch) {
                    // 本节旨在介绍客户端,暂不添加业务逻辑
                }
            })
            // 连接本机8080端口
            .connect("127.0.0.1", 8080);
    }
}

以上就是创建一个客户端的主要代码组件:

  • 创建一个线程组,主要用于连接的读写
  • 创建一个 Bootstrap 实例引导客户端配置
  • 指定IO模型(NIO)
  • 指定一个handler,主要用来处理业务逻辑,暂不指定
  • 指定连接地址

Bootstrap其他配置

  • channelFactory

    如果不能通过默认的无参构造方法创建Channel,那么可以通过调用 channelFactory 来指定一个工厂类,它将会被bind方法调用

  • option

    可以给连接设置一些 TCP 底层相关的属性,比如:

    • 1.ChannelOption.CONNECT_TIMEOUT_MILLIS:超时时间,超过则连接失败
    • 2.ChannelOption.SO_KEEPALIVE:开启TCP心跳机制,true开启
  • attr

    可以给客户端的 channel ,也就是 NioSocketChannel 绑定自定义属性(相当于维护了一个map),后可以通过同名方法取出这个属性

  • localAddress

    指定channel绑定到本地地址,同服务端的用法

  • remoteAddress

    指定channel绑定到远程地址

  • connect

    指定ip,port后连接远程节点会返回一个 ChannelFuture ,将会在连接操作之后接收通知(可通过判断连接成功失败做重试操作)

  • bind

    绑定 channel 并返回一个 ChannelFuture ,其将会在绑定操作完成后接收到通知,其后必须调用 connect 方法

连接成功的验证

bootstrap.connect(host, port).addListener(future -> {
    if (future.isSuccess()) {
        System.out.println("连接成功!");
    } else {
        System.out.println("连接失败");
    }
});

这样在客户端连接成功之后,会有一个回调,证明客户端连接成功

参考资料

  • 掘金小册《Netty 入门与实战:仿写微信 IM 即时通讯系统》

    小册地址:https://juejin.im/book/5b4bc28bf265da0f60130116/section/5b4dafd4f265da0f98314cc7

    Github地址:https://github.com/lightningMan/flash-netty/tree/%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B

  • 《Netty in action》

本文由 发给官兵 创作,采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出 处。如转载至微信公众号,请在文末添加作者公众号二维码。

Netty实战(二):客户端启动流程_第1张图片
image

你可能感兴趣的:(Netty实战(二):客户端启动流程)