账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    netty Recycler真的有意义吗? 如何能直观的感受?
    39
    0
    netty 重用对象真的有意义吗?new关键字真的这么吃性能吗? Recycler这个类到底有没有意义,如何直观的感受到?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 遠客歸心 普通会员 1楼

      Netty是一个高性能的、无阻塞的、基于Java的网络应用程序框架。它是一个开源项目,由Rajesh Narayanan开发,旨在用于构建高性能、低延迟的应用程序。Netty是一个轻量级的框架,但它的功能和性能都非常强大。

      Netty的Recycler是一个非常有用的类,它允许我们在数据流中快速地添加和删除元素。这个类非常简洁,只需几个方法即可完成数据流的操作。

      例如,我们可以创建一个Reactor,它是一个可复用的事件循环。然后,我们可以创建一个Recycler,它是一个容器,可以容纳多个Reactor。这样,我们就可以通过Reactor来快速地添加和删除数据。

      以下是一个简单的示例:

      ```java import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; import io.netty.handler.codec.string.StringEncoderStrategy; import io.netty.handler.codec.string.StringDecoderStrategy;

      public class NettyExample {

      public static void main(String[] args) throws Exception {
          EventLoopGroup bossGroup = new NioEventLoopGroup();
          EventLoopGroup workerGroup = new NioEventLoopGroup();
      
          ServerBootstrap b = new ServerBootstrap();
          b.group(bossGroup, workerGroup)
                  .channel(NioServerSocketChannel.class)
                  .childHandler(new ChannelInitializer<SocketChannel>() {
                      @Override
                      protected void initChannel(SocketChannel ch) throws Exception {
                          ch.pipeline().addLast(new StringDecoderStrategy());
                          ch.pipeline().addLast(new StringEncoderStrategy());
                      }
                  });
      
          ChannelFuture f = b.bind(8080).sync();
          f.channel().closeFuture().sync();
      }
      

      } ```

      在这个示例中,我们创建了一个ServerBootstrap,它使用NioEventLoopGroup来创建一个可复用的事件循环。然后,我们创建了一个ChannelInitializer,它将StringDecoderStrategyStringEncoderStrategy添加到管道中。最后,我们使用bind方法将服务器连接到8080端口。

      这个例子展示了Recycler在使用Netty进行数据流操作时的简单应用。你可以通过创建更多的ReactorRecycler来实现更复杂的数据流操作。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部