Netty网络编程(三)

引导

引导(Bootstrapping)一个应用程序是指对它进行配置,使它运行起来的过程。Netty处理引导的方式使您的应用程序和网络层相隔离。引导负责将前面介绍的ChannelPipeline,ChannelHandler和EventLoop组织起来成为一个可实际运行的整体。

Bootstrap类

  服务器致力于使用一个父channel来接受来自客户端的链接,并创建子channel以其相互之间的通信。而客户端将最可能只需要一个单独的,没有父channel的channel来用于网络交互。
  两种类型的通用的引导步骤由AbstractBootstrap处理,而特定于客户端或服务器的引导步骤分别由Bootstrap和ServerBootstrap处理。

Bootstrap类的API

名称描述
Bootstrap group(EventLoopGroup)设置为处理channel所有事件的EventLoopGroup
Bootstrap channel(class<? extends C>)
Bootstrap channelFactory(ChannelFactory<? extends C>
channel方法指定了Channel的实现类,如果该实现类没有提供替代的构造函数,可以通过调用CahnnelFactory方法指定一个工厂类,将会被bind()方法调用
Bootstrap localAddress(SocketAddress)指定Channel应该绑定到也可以通过bind()或connect()方法来指定localAddress
<T>Bootstrap option(Channeloption <T> option,T value)设置ChannelOption,将被应用到每个新创建的Channel的ChannelConfig中.
Bootstrap attr(Attribute<T> key,T vlaue)指定先创建的channel的属性值,通过绑定或连接方法设置到channel,具体取决于谁先被调用。该方法在创建后再调用不会有任何效果
Bootstrap handler(ChannelHanlder)设置将被添加到的ChannelPipeline以接受事件通知的ChannelHandler
Bootstrap clone()创建一个当前Bootstrap的克隆,其功能和原始Bootstrap相同的设置信息
Bootstrap remoteAddress(SocketAddress)设置远程地址或通过connect方法指定它
ChannelFuture connect()链接到远程并行并返回一个ChannelFuture,重新链接操作完成后接收到通知
ChannelFuture bind()绑定Channel并返回一个ChannelFuture,将会重新绑定操作完成后接收到通知,在那之后必须调用Channel.connect方法来建立链接。

引导客户端代码示例

EventLoopGroup group = new NioEventLoopGroup(); 

Bootstrap bootstrap = new Bootstrap();	 //创建一个Bootstrap类的实例来创建和链接新的客户端channel
bootstrap.group(group) 			//设置EventLoopGroup提供用于处理Channel事件的EventLoop
	.channel(NioSocketChannel.class)//指定要使用的通道实现
	//设置为ChannelEvent通道和数据的ChannelInboundHandler 
	.handler(new SimpleChannelInboundHandler<ByteBuf> (){
		@Override 
		protected void channelRead0(
			ChannelHandlerContext channelContext,
			ByteBuf byteBuf)
			throws Exception{
				System.out .printf(“Received data”);
			}
		}
	); 
	//链接到远程主机
	ChannelFuture future = bootstrap.connect(
		new InetSocketAddress(“ www.manning.com”),80);)
	future.addListener (new ChannelFutureListener(){
	@Override
	public void operationComplete(ChannelFuture channe Future)
	throws Exception{
		if (channelFutre.isSuccess()){
               		System.out.printf(“connect established”);
               }else { 
                     System.out.printf(“bound atempt failed ”) ; 
                     channelFutre.cause().printStackTrace(); 
              }
       }
});

引导服务器代码示例

EventLoopGroup group = new NioEventLoopGroup(); 
ServerBootstrap bootstrap = new ServerBootstrap();    
bootstrap.group(group)                    //设置EventLoopGroup提供用于处理Channel事件的EventLoop
       .channel(NioServerSocketChannel.class)//指定要使用的通道实现
       //设置为ChannelEvent通道和数据的ChannelInboundHandler 
       .channelHandler(new SimpleChannelInboundHandler<ByteBuf> (){
              @Override
              protected void channelRead0(
                     ChannelHandlerContext channelContext ctx,
                     ByteBuf byteBuf
                     )throws Exception{
                            System.out.printf(“Received data”);
                     }
              }
       ); 

        //通过配置好的ServerBootstrap的实例绑定该Channel
        ChannelFuture future = bootstrap.bind(new InetSocketAddress("8080"))
       	future.addListener(new ChannelFutureListener(){
       	@Override
       	public void operationComplete(ChannelFuture channelFuture)
		throws Exception{
             	if (channelFutre.isSuccess()){
                        System.out.printf(“connect established”);
               }else { 
                     System.out.printf(“bound attempt failed”) ; 
                     channelFutre.cause().printStackTrace();

              }

	}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值