Netty入门二:Netty概述及Demo

本文介绍了Netty的基础概念,强调了它作为非阻塞IO框架的优势,以及与Tomcat的区别。通过实例展示了如何创建Netty服务器和客户端,包括EchoServerHandler的实现、NioEventLoopGroup的使用,以及BootStrap配置。同时推荐了相关的学习资源。
摘要由CSDN通过智能技术生成

Netty简述

今天,我们使用通用的应用程序或者类库来实现互相通讯,比如,我们经常使用一个 HTTP 客户端库来从 web 服务器上获取信息,或者通过 web 服务来执行一个远程的调用。

然而,有时候一个通用的协议或他的实现并没有很好的满足需求。比如我们无法使用一个通用的 HTTP 服务器来处理大文件、电子邮件以及近实时消息,比如金融信息和多人游戏数据。我们需要一个高度优化的协议来处理一些特殊的场景。例如你可能想实现一个优化了的 Ajax 的聊天应用、媒体流传输或者是大文件传输器,你甚至可以自己设计和实现一个全新的协议来准确地实现你的需求。

我们知道Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,由于 NIO 原生编程太过于复杂,Netty对其进行了优秀的封装。Netty 大大简化了网络程序的开发过程比如 TCP 和 UDP 的 socket 服务的开发。

通过 Netty 我们可以快速简单地开发网络应用程序,比如服务器(HTTP服务器,FTP服务器,WebSocket服务器,Redis的Proxy服务器等等)和客户端的协议。Netty 大大简化了网络程序的开发过程比如 TCP 和 UDP 的 socket 服务的开发。

Netty和Tomcat有什么区别?

Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。

有人说netty的性能就一定比tomcat性能高,其实不然,tomcat从6.x开始就支持了nio模式,并且后续还有APR模式——一种通过jni调用apache网络库的模式,相比于旧的bio模式,并发性能得到了很大提高,特别是APR模式,而netty是否比tomcat性能更高,则要取决于netty程序作者的技术实力了。

入门教程

Netty 4.x User Guide 中文翻译《Netty 4.x 用户指南》
Essential Netty in Action 《Netty 实战(精髓)

服务器demo

让我们从 handler (处理器)的实现开始,handler 是由 Netty 生成用来处理 I/O 事件的。

 public class EchoServerHandler extends ChannelInboundHandlerAdapter {
   

  @Override
  public void channelRead(ChannelHandlerContext ctx, Object msg) {
   
    System.out.println(ctx.channel().remoteAddress() + "->Server :" + msg.toString());
    ctx.write(msg); // (1)
    ctx.flush(); // (2)
    //        final ChannelFuture future = ctx.writeAndFlush(msg);
    //    final ChannelFuture future = ctx.write(msg + "\n");
   
  }

  @Override
  public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
   
    System.out.println("server read complete");
    ctx.flush();
    TimeUnit.MILLISECONDS.sleep(200);
  }

  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
   
    // 当出现异常就关闭连接
    cause.printStackTrace();
    ctx.close();
  }
}

  1. EchoServerHandler 继承自 ChannelInboundHandlerAdapter,这个类实现了
    ChannelInboundHandler接口,ChannelInboundHandler
    提供了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值