本章介绍 ChannelPipeline ChannelHandlerContext ChannelHandler Inbound vs outbound(入站和出站) 接受连接或创建他们仅仅是你的应用程序的一部分,尽管这些不论什么非常重要,可是一个网络应用程序旺旺是更复杂的,须要很多其它的代码编写,如处理传入和传出的数据.Netty提供了一个强大的处理这些事情的功能,同意用户自己定义ChannelHandler的实现来处理数据.使得ChannelHandler更强大的是能够连接每一个Chann…
本章内容 Transports(传输) NIO(non-blocking IO,New IO), OIO(Old IO,blocking IO), Local(本地), Embedded(嵌入式) Use-case(用例) APIs(接口) 网络应用程序一个非常重要的工作是数据传输.数据传输的过程不一样取决是使用哪种交通工具,可是传输的方式是一样的:都是以字节码传输. Java开发网络程序数据传输的过程和方式是被抽象了的,我们不须要关注底层接口.仅仅须要使用Java API或其它网络框架如Net…
http://blog.csdn.net/abc_key/article/details/38041143 本章介绍 Codec,编解码器 Decoder,解码器 Encoder,编码器 Netty提供了编解码器框架,使得编写自己定义的编解码器非常easy,而且也非常easy重用和封装. 本章讨论Netty的编解码器框架以及使用. 7.1 编解码器Codec         编写一个网络应用程序须要实现某种编解码器.编解码器的作用就是讲原始字节数据与自己定义的消息对象进行互转.网络中都是以字节码…
本章介绍 ByteBuf ByteBufHolder ByteBufAllocator 使用这些接口分配缓冲和运行操作 每当你须要数据传输时,它必须包括一个缓冲区.Java NIO API自带的缓冲区类是相当有限的,没有经过优化,使用JDK的ByteBuffer操作更复杂.缓冲区是一个重要的组建,它是API的一部分. Netty提供了一个强大的缓冲区实现用于表示一个字节序列,并帮助你操作原始字节或自己定义的POJO.Netty的ByteBuf相当于JDK的ByteBuffer,ByteBuf的作…
        在这一章我们将讨论Netty的10个核心类.清楚了解他们的结构对使用Netty非常实用.可能有一些不会再工作中用到.可是也有一些非经常常使用也非常核心,你会遇到. Bootstrap or ServerBootstrap EventLoop EventLoopGroup ChannelPipeline Channel Future or ChannelFuture ChannelInitializer ChannelHandler        本节的目的就是介绍以上这些概念.帮…
本章介绍 Netty介绍 为什么要使用non-blocking IO(NIO) 堵塞IO(blocking IO)和非堵塞IO(non-blocking IO)对照 Java NIO的问题和在Netty中的解决方式 Netty是基于Java NIO的网络应用框架,假设你是Java网络方面的新手,那么本章将是你学习Java网络应用的開始:对于有经验的开发人员来说,学习本章内容也是非常好的复习.假设你熟悉NIO和NIO2,你能够随时跳过本章直接从第二章開始学习.在你的机器上执行第二章编写的Netty…
本章介绍 获得Netty4最新的版本号 设置执行环境,以构建和执行netty程序 创建一个基于Netty的server和client 拦截和处理异常 编制和执行Nettyserver和client 本章将简介Netty的核心概念,这个狠心概念就是学习Netty是怎样拦截和处理异常.对于刚開始学习netty的读者.利用netty的异常拦截机制来调试程序问题非常有帮助.本章还会介绍其它一些核心概念.如server和client的启动以及分离通道的处理程序.本章学习一些基础以便后面章节的深入学习. 本…
http://blog.csdn.net/abc_key/article/details/38419469 本章介绍 线程模型(thread-model) 事件循环(EventLoop) 并发(Concurrency) 任务运行(task execution) 任务调度(task scheduling) 线程模型定义了应用程序或框架怎样运行你的代码.选择应用程序/框架的正确的线程模型是非常重要的.Netty提供了一个简单强大的线程模型来帮助我们简化代码,Netty对全部的核心代码都进行了同步.全…
Working on a Per-Partition Basis(基于分区的操作) 以每个分区为基础处理数据使我们可以避免为每个数据项重做配置工作.如打开数据库连接或者创建随机数生成器这样的操作,我们希望避免为每个元素重做配置工作.Spark有分区版本的map和foreach,通过让RDD的每个分区只运行一次代码,可帮助降低这些操作的成本. 回到我们的呼号例子中,有一个无线电台呼号的在线数据库,我们可以查询联系日志的公共列表.通过使用基于分区的操作,我们可以分享数据库的连接池来避免为多个连接配置…
Introduction(介绍) 本章介绍了之前章节没有涵盖的高级Spark编程特性.我们介绍两种类型的共享变量:用来聚合信息的累加器和能有效分配较大值的广播变量.基于对RDD现有的transformation(转换),我们针对构建成本高的任务引入批量操作,如查询数据库.为了扩展我们可使用工具的范围,我们介绍Spark与外部程序交互的方法,例如用R编写的脚本. 在本章中,我们将以无线电台的通话记录作为输入构造一个示例.这些日志至少包括联系电台的呼号.呼号由国家分配,并且每个国家有自己的呼号范围,…