android netty导入_Netty框架浅析--内附Android实现demo

一、Netty框架简介

(本文中部分图片摘自Netty-In-Depth)

Netty是一款以异步事件为驱动的网络开发框架和工具,能够快速的帮助开发者开发出可维护的高性能,高扩张性的服务器和客户端。

二、Netty相较于其他I/O编程的优点

1、BIO编程

在基于传统同步阻塞模型开发中,ServerSocket 负责绑定 IP 地址,启动监听端口;Socket 负责发起连接操作。连接成功之后,双方通过输入和输出流进行同步阻塞式通信。server端为每一个连上来的client端新建一个线程进行链路处理,处理完成之后通过输出流返回应答到客户端,然后线程销毁。也就是典型的一请求一应答通信模型。但是这种模型在连接的客户端数量庞大的时候,相应的服务端线程数量也会剧增,这就会使服务端因为线程数量过多而宕机。

BIO编程(摘自Netty-In-Depth)

2、伪异步IO编程

伪异步IO线程其实就是在BIO编程基础上增加了线程池,将处理客户端连接请求的操作交给线程池去处理,这样线程数量就处于可控状态,可以有效的防止线程耗尽,但是这种模型会出现通信时间过长导致级联故障:比如服务端处理时间过长,或者其他线程出现故障,由于IO操作是阻塞的,因此假如当前所有可用线程都被阻塞了,那么后续的所有连接都会在队列中排队等待,当队列达到最大可容纳数量时,后续入队列操作会被阻塞。这样acceptor因为阻塞在线程池的队列中,所以无法处理后续客户端的连接请求,出现大量的连接超时。

伪异步IO(摘自Netty-In-Depth)

3、NIO编程

前面两种编程模型出现的问题其实还是在于IO操作是同步阻塞的,所以要解决这些问题,最好的办法就是从“同步阻塞”这方面入手,因此JAVA提供了NIO类库,其实就是让JAVA支持非阻塞IO,与传统BIO编程中的Socket连接方式来说,我们通过Socket跟ServerSocket来进行连接、监听端口、获取输入输出流等操作,而与之对应的,NIO提供了SocketChannel和ServerSocketChannel,我们可以称其为“通道”,它们支持阻塞跟非阻塞两种模式,阻塞方式会出现上面我们提到过的问题,而非阻塞模式则可以大大提高性能。一般来说,低负载、低并发的应用程序可以选择同步阻塞 I/O 以降低编程复杂度,但是对于高负载、高并发的网络应用,需要使用 NIO 的非阻塞模式进行开发。

4、AIO编程

NIO编程虽然是非阻塞的,但是他依然采用的是同步IO(多路复用)。也就是说需要通过一个多路复用器(Selector)对注册的通道进行轮询操作,这对性能也会有所影响,所以便有了NIO2.0,它引入了异步通道的概念,提供了异步文件通道和异步套接字通道的实现。NIO2.0是异步非阻塞IO,不需要通

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值