Netty ’ 目录归档

《Netty in Action》中文版—第七章 EventLoop和线程模型

本文翻译自《Netty in Action》第七章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • 线程模型概览
  • Event Loop的概念和实现
  • Task调度
  • 实现详解

简单来说,线程模型定义了操作系统,编程语言,框架或者应用程序线程管理的关键部分。线程是如何,并且何时被创建,显然对代码的执行有很大的影响。因此,开发者需要理解不同线程模型中存在的权衡利弊。无论他们是直接为自己选择模型,还是通过用一种语言或者框架隐性地来选择模型,这一点都是毋庸置疑的。

在这一章我们会详细探讨Netty的线程模型。Netty线程模型很强大,不过用起来很简单。Netty总是一如既往地简化你的应用代码,最大化应用的性能和可维护性。我们还会讨论到我们选择Netty目前这个线程模型的整个过程。

如果你对Java并发API(java.util.concurrent)有一个大致的了解,你会感觉本章的讨论很清晰明了。如果你对这些概念不熟悉,或者需要再回忆下,Brian Goetz和其他人合著的《Java并发编程实战》是个很棒的资源。
阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty in Action》中文版—第七章 EventLoop和线程模型

《Netty in Action》中文版—第六章 ChannelHandler和ChannelPipeline

本文翻译自《Netty in Action》第六章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • ChannelHandler和ChannelPipeline APIs
  • 检测资源泄露
  • 异常处理

在前一章,你学习了Netty的数据容器ByteBuf。在这一章我们会在你已经学过的知识的基础上探讨Netty的数据流和处理模块。你会开始看到这个框架的一些重要元素被组合到一起了。

你已经了解到,ChannelHandler在一个ChannelPipeline中被链在一起,将所有的处理逻辑组织起来。我们会在这一章学习有关这两个类的各种用例,以及另一个重要的相关类,ChannelHandlerContext。

理解所有这些组件之间的相互作用是用Netty创建一个模块化的,可复用应用的关键。
阅读全文

《Netty in Action》中文版—第五章 ByteBuf

本文翻译自《Netty in Action》第五章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • ByteBuf—Netty的数据容器
  • API详情
  • 用例
  • 内存分配

正如我们前面提到的,网络数据的基础单位总是字节。Java NIO用ByteBuffer做它的字节容器,但是这个类使用起来过于复杂,有时候还非常麻烦。

Netty用ByteBuf替代了ByteBuffer,这个强大的实现突破了JDK API的限制,为网络开发者提供了更好的API。

在这一章我们会展现同ByteBuffer相比,ByteBuf的出色功能和灵活性。这也让你从大体上更好地理解Netty数据处理的方式,并且为第六章ChannelPipeline和ChannelHandler的讨论做好准备。
阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty in Action》中文版—第五章 ByteBuf

《Netty in Action》中文版—第四章 传输

本文翻译自《Netty in Action》第四章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

 

本章包含

  • OIO—阻塞传输
  • NIO—异步传输
  • 本地传输—JVM内部的异步通信
  • 嵌入式传输—测试你的ChannelHandler

经过一个网络的数据通常是同一种类型:字节。这些数据是如何移动的基本上取决于被我们称之为网络传输的概念,这个概念帮我们抽象了底层的数据传输机制。用户不关心细节,他们只关心他们的字节数据被可靠地传送和接收。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty in Action》中文版—第四章 传输

《Netty in Action》中文版—第三章 Netty的组件和设计

本文翻译自《Netty in Action》第三章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • Netty的技术和架构方面
  • ChannelEventLoopChannelFuture
  • ChannelHandlerChannelPipeline
  • Bootstrapping

在第一章我们总结了Java高效能网络编程的历史和技术基础,这为概述Netty的核心概念和构造模块提供了一个背景。

在第二章我们把讨论范围扩展到应用开发。通过创建一个简单的客户端和服务器你学到了bootstrapping,获得了一些亲自实践核心ChannelHandler API的经验。与此同时,你也验证了你的开发工具是可以正常工作的。

以这些内容为基础,在本书剩下的部分,我们会从两个不同但是密切联系的角度来研究Netty:做为一个类库和做为一个框架。这两个方面对用如何Netty开发高效,可重用,可维护的代码都很关键。

从一个高层次的角度来看,Netty解决了两个相应领域的问题,我们可以大体上称其为技术上的(technical)和结构上的(architectural)。首先,它的异步和事件驱动基于Java NIO实现,在高负载下能保证最好的应用性能和可扩展性。第二,Netty包含了一系列用来解耦应用逻辑和网络层的设计模式,简化了开发的同时最大限度地提升了可测试性,模块化和可重用性。

随着我们更具体地学习Netty的单个组件,我们将会密切关注这些组件是如何配合来支持结构的最佳实践(best practices)。遵循同样的原则,我们就能收获Netty提供的所有好处。在这个目标的指引下,在这一章,我们会回顾下到目前为止我们已经介绍过的主要概念和组件。

3.1 ChannelEventLoopChannelFuture

下面几个小节会对我们讨论的ChannelEventLoopChannelFuture类增加一些细节,它们合起来可以被看成是Netty的网络抽象(Networking abstraction)

  • ChannelSockets
  • EventLoop—控制流,多线程,并发
  • ChannelFuture—异步通知

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty in Action》中文版—第三章 Netty的组件和设计

《Netty in Action》中文版—第二章 你的第一个Netty应用

本文翻译自《Netty in Action》第二章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含:

  • 创建开发环境
  • 编写一个Echo服务器和客户端
  • 编译测试应用

在这一章我们将会向你展示如何创建一个基于Netty的客户端和服务器。这两个应用很简单—客户端送消息到服务器,服务器再将该消息送回客户端—不过,基于两个原因,这个练习很重要。

首先,它提供了一个创建和验证开发工具及环境的试验台。如果你打算用书里的示例代码来准备你自己的开发,那么这一点很重要。

第二,你能积累一些亲手实践前一个章节提到的Netty关键部分的经验:用ChannelHandlers来创建应用逻辑。这能帮你为从第三章开始的Netty API深入学习做好准备。
阅读全文

《Netty in Action》中文版—第一章 Netty—异步和事件驱动

本文翻译自《Netty in Action》第一章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • Java的网络编程
  • Netty初探
  • Netty的核心组件

假设你即将要为一个重要的大公司开发一个新的关键任务的应用程序。在第一次会议上,你了解到这个系统必须能无性能损耗地扩展到支持15万个并发用户。这时所有的人都看着你,你会说什么?
阅读全文

《Netty in Action》中文版 — 第一部分前言

本文翻译自《Netty in Action》第一部分前言 

作者:Norman Maurer, Marvin Allen Wolfthal    译者:桃小胖

Netty是一个用于创建高性能网络应用的成熟框架。在本书的第一部分,我们将深入探讨Netty的性能,同时展现以下三个要点:

  • 你不必成为一个网络专家,才能用Netty搭建应用
  • 使用Netty比直接使用底层的Java APIs要简单的多
  • Netty能促成良好的设计原则,比如说解耦你的应用层逻辑和网络层

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty in Action》中文版 — 第一部分前言

《Netty in Action》中文版—目录

本文翻译自《Netty in Action》目录  作者:Norman Maurer, Marvin Allen Wolfthal  译者:桃小胖

第一部分 NETTY的概念和结构

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty in Action》中文版—目录

Netty框架中的@Skip使用说明

最近在学习Netty框架,对着教程上写了个简单的netty应用,可是死活调试不成功,对着程序跟教程上看了几遍也找不到原因,后来又重新写了一遍,服务端程序终于调试成功,原因出在了那个@Skip注释上了,代码如下:
阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Netty框架中的@Skip使用说明

Netty源码注释翻译-Channel类

定义为一个通往网络socket或者一个由I/O读写能力的组件。

通道提供:
1,通道的当前状态,打开?已连接?
2,跟通道关联的配置信息ChannelConfig,包括buffer大小等。
3,通道支持的I/O操作,如读、写、连接、绑定等。
4,跟通道关联的ChannelPipeline,用来处理通道的I/O事件和请求。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Netty源码注释翻译-Channel类

Netty 5用户指南

原文地址http://netty.io/wiki/user-guide-for-5.x.html    译者:光辉勇士      校对:郭蕾

前言

问题

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

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

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Netty 5用户指南

《Netty 权威指南》—— 选择Netty的理由

声明:本文是《Netty 权威指南》的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文。

在开始本节之前,我先讲一个亲身经历的故事:曾经有两个项目组同时用到了NIO编程技术,一个项目组选择自己开发NIO服务端,直接使用JDK原生的API,结果2个多月过去了,他们的NIO服务端始终无法稳定,问题频出。由于NIO通信是它们的核心组件之一,因此,项目的进度受到了严重的影响,领导对此非常恼火。另一个项目组直接使用Netty作为NIO服务端,业务的定制开发工作量非常小,测试表明,功能和性能都完全达标,项目组几乎没有在NIO服务端上花费额外的时间和精力,项目进展也非常顺利。

这两个项目组的不同遭遇提醒我们:开发出高质量的NIO程序并不是一件简单的事情,除去NIO固有的复杂性和BUG不谈,作为一个NIO服务端需要能够处理网络的闪断、客户端的重复接入、客户端的安全认证、消息的编解码、半包读写等等,如果你没有足够的NIO编程经验积累,一个NIO框架的稳定往往需要半年甚至更长的时间。更为糟糕的是一旦在生产环境中发生问题,往往会导致跨节点的服务调用中断,严重的可能会导致整个集群环境都不可用,需要重启服务器,这种非正常停机会带来巨大的损失。

从可维护性角度看,由于NIO采用了异步非阻塞编程模型,而且是一个IO线程处理多条链路,它的调试和跟踪非常麻烦,特别是生产环境中的问题,我们无法有效调试和跟踪,往往只能靠一些日志来辅助分析,定位难度很大。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty 权威指南》—— 选择Netty的理由

《Netty 权威指南》—— 4种IO的对比

声明:本文是《Netty 权威指南》的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文。

2.5.1.概念澄清

为了防止由于对一些技术概念和术语的理解或者叫法不一致引起歧义,本小节特意对本书中的专业术语或者技术用语做下声明,如果它们与其它的一些技术书籍术语不一致,请以本小节的解释为准。

2.5.1.1. 异步非阻塞IO

很多人喜欢将JDK1.4提供的NIO框架称为异步非阻塞IO,但是,如果严格按照Unix网络编程模型和JDK的实现进行区分,实际上它只能被称为非阻塞IO,不能叫异步非阻塞IO。在早期的JDK1.4和1.5 update10版本之前,JDK的Selector基于select/poll模型实现,它是基于IO复用技术的非阻塞IO,不是异步IO。在JDK1.5 update10和linux core2.6以上版本,sun优化了Selctor的实现,它底层使用epoll替换了select/poll,上层的API并没有变化,我们可以认为是JDK NIO的一次性能优化,但是它仍旧没有改变IO的模型。相关优化的官方说明如下:

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty 权威指南》—— 4种IO的对比

《Netty 权威指南》—— AIO版本时间服务器运行结果

声明:本文是《Netty 权威指南》的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文。

执行TimeServer,运行结果如下:

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty 权威指南》—— AIO版本时间服务器运行结果

return top