`
san_yun
  • 浏览: 2662576 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

netty ChannelFuture

 
阅读更多

在Netty中所有的io操作都是异步的,这也就是意味任何io访问,那么就立即返回处理,并且不能确保
返回的数据全部完成。因此就出现了channelFuture,channelFuture在传输数据时候包括数据和状态两个
部分。他只有Uncompleted和Completed, 既然netty io是异步的,那么如何知道channel传送完成有两种方式,一种添加监听器addListener(ChannelFutureListener) 还有一种直接调用await()方法,这两种方式有下面的区别:

监听器:
是以事件模式的,因此代码就需要用事件模式的样式去写,相当复杂,但他是non-blocking模式的性能方面要比await方法好,而且不会产生死锁情况
wait():
直接方法调用,使用简单,但是他是blocking模式,性能方面要弱而且会产生死锁情况
 
不要在ChannelHandler 里面调用await(),这是因为通常在channelHandler里的event method是被i/o线程调用的(除非ChannelPipeline里面有个ExecutionHandler),那么如果这个时候用await就容易产生死锁。


io write() 之后并不直接写数据, 而是将数据写入一个队列, 然后返回. 由worker线程取出, 执行写操作, 成功后发送事件, 也就调用了你的那个 Listener,所以doSomething() 也是在worker线程执行的.



分享到:
评论

相关推荐

    Netty权威指南PDF书籍

    Netty 采用 ChannelFuture 和 ChannelPromise 提供异步编程模型,使得开发者可以优雅地处理异步操作的完成和异常。 5. **Netty 的数据处理** - **ByteBuf**:Netty 的缓冲区实现,提供了高效的字节操作和内存管理...

    netty官网学习手册中文版

    这个“netty官网学习手册中文版”针对的是Netty的3.1版本,虽然现在的Netty已经发展到了5.x版本,但3.1版本的知识仍然具有历史参考价值,特别是对于那些初次接触或需要理解Netty基础概念的开发者来说。 1. **Netty...

    Netty-API-文档中文版

    通过“Netty-API-文档中文版”,你可以详细了解到如何创建ServerBootstrap、Bootstrap、ChannelFuture、ChannelInboundHandlerAdapter等核心组件,以及如何配置和使用各种编解码器。文档还会介绍如何进行连接管理、...

    基于netty编写的socket服务端

    ChannelFuture f = b.bind(port).sync(); f.channel().closeFuture().sync(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } ``` 这里的`NioServerSocketChannel`是Netty...

    深入浅出Netty_netty5.0_

    ChannelFuture和ChannelHandlerContext是两个关键概念,前者用于异步操作,后者提供了上下文信息,用于在处理器之间传递消息。 Netty的缓冲区(Buffer)机制是其性能优化的关键之一。它提供了一种高效的方式来读写...

    netty实现的聊天代码

    Netty 的事件驱动模型通过 `EventLoopGroup` 和 `ChannelFuture` 实现了这一点,它们负责调度事件处理和异步操作。 标签中的 "chatdemo" 表明这是一个简单的聊天应用示例,适合初学者了解 Netty 的基本用法。而 ...

    netty 4.1 中文api 帮助文档 + 用户指南

    此外,Netty 提供的 ChannelFuture 和 Promise 模型使得异步编程更加简洁和易懂。通过理解并运用这些特性,可以编写出高效、灵活且易于扩展的网络程序。 总的来说,Netty 4.1 的中文文档和用户指南是学习和使用 ...

    netty-netty-4.1.79.Final.tar.gz

    其ChannelFuture和Promise机制,使得异步操作的链式调用变得简单,同时提供了灵活的错误处理策略。 5. **零拷贝**:Netty实现了操作系统层面的零拷贝,通过直接缓冲区和FileChannel的transferTo方法,减少了数据在...

    netty 通过端口调用关闭

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨“Netty 通过端口调用关闭”的主题,这通常涉及到网络服务器的生命周期管理和资源...

    spring boot 集成原生netty(非netty-io-socket)

    import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio....

    Netty权威指南(第二版)

    11. **ChannelFuture与Promise**:ChannelFuture表示异步操作的结果,Promise是其子类,用于处理回调。通过它们,开发者可以编写出非阻塞的代码。 12. **WebSocket支持**:Netty提供了WebSocket协议的完整实现,...

    基于Netty实现的文件上传

    2. ChannelFuture:异步操作的结果,等待操作完成的监听器。 3. EventLoopGroup:事件循环组,处理I/O事件的核心组件。 4. ChannelInboundHandlerAdapter:自定义处理器适配器,用于处理入站事件,如连接建立、数据...

    Netty3.5代码例子

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在深入探讨Netty之前,我们先要理解网络编程和Socket的基础概念。 网络编程是计算机通过网络进行通信的过程...

    netty-file-master.rar

    Netty 的 ChannelFuture 和 ChannelPromise 可以用来处理这些异常,实现错误重试和断点续传。 8. **流量控制** Netty 提供的 FlowControlStrategy 可以帮助控制数据的发送速率,防止因过快的发送速度导致接收方...

    基于Netty的Java数据采集软件

    Netty的ClientBootstrap类提供了创建客户端连接的便利,配合ChannelFuture,客户端可以在连接建立后立即启动数据采集任务。此外,客户端可能使用了心跳机制来保持连接活跃,并检测网络异常。 "JSONObject"库,通常...

    网络编程之Netty一站式精讲.rar

    2. 连接处理:通过ChannelFuture监听客户端连接,处理连接建立和断开事件。 3. 数据收发:使用ByteBuf读写数据,通过Pipeline中的处理器进行解码和编码。 4. 错误处理:设置异常处理器,捕获并处理网络通信中的错误...

    Netty 3中文版

    - **ChannelFuture**: 表示Channel上的异步操作,可以通过监听其完成或失败来处理结果。 - **Decoder和Encoder**: 用于将网络数据转换为应用程序可以理解的对象,以及将应用程序对象编码为网络数据。 - **...

    NettySocket同步数据获取实现

    然而,在Netty中,由于其非阻塞I/O模型,同步数据获取通常涉及ChannelFuture对象,它代表了一个异步操作的结果。我们可以注册监听器来处理操作完成后的回调,从而实现同步效果。 1. **NettySocket同步数据获取**: ...

    netty 4.1中文.CHM

    10. **ChannelFuture**和**Promise**:这些概念提供了异步编程的支持,使得开发者能够编写非阻塞的代码,提高了程序的响应速度。 这个中文版的帮助文档会详细解释以上各个组件的使用方法,以及如何配置和优化Netty...

    android+netty 的demo

    4. **Bootstrap** 和 **ChannelFuture**:Bootstrap是启动网络连接的配置类,ChannelFuture代表操作的未来结果,可用于异步操作。 5. **Pipeline**:网络事件的处理链,你可以将多个ChannelHandler添加到Pipeline中...

Global site tag (gtag.js) - Google Analytics