标签分类
当前位置:首页 > 程序设计电子书 > Netty电子书网盘下载
Netty、Redis、Zookeeper高并发实战

Netty、Redis、Zookeeper高并发实战 原书完整版电子书

官方价: 62

更 新:

Netty、Redis、Zookeeper高并发实战 (pdf、epub、mobi、azw3)下载

下载地址:https://pan.baidu.com/s/1OKBevFrPYM3qZ-vlvTloO

分享码:oi04

给大家带来的一篇关于Netty相关的电子书资源,介绍了关于Netty、Redis、Zookeeper、高并发方面的内容,本书是由机械工业出版社出版,格式根据源资源分为PDF、epub、mobi、azw3其中一种或多种格式,资源大小15.6 MB,尼恩编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.8,更多相关的学习资源可以参阅 程序设计电子书、等栏目。

Netty、Redis、Zookeeper高并发实战 PDF

这书以便让读者扎稳高性能基本,通俗易懂地分析高并发IO的最底层原理,细腻细致地分析Reactor高性能方式,图片配文字地介绍Java多线程回调函数方式。把握这种基本原理,可以协助读者处理Java后台管理开发设计的一些实际上难题。
这书共12章,关键介绍高性能通讯框架结构Netty,并详细介绍Netty的EventLoop、Handler、Pipeline、ByteBuf、Decoder、Encoder等关键部件,随后介绍竞聚率IM的实战演练设计方案和控制模块保持。这书对ZooKeeper、 Curator API、Redis、Jedis API的应用也开展详细的介绍,让读者具有高并发、可拓展系统软件的设计方案和开发设计能力。

目录

  • 前言
  • 第1章 高并发时代的必备技能 1
  • 1.1 Netty为何这么火 1
  • 1.1.1 Netty火热的程度 1
  • 1.1.2 Netty是面试的必杀器 2
  • 1.2 高并发利器Redis 2
  • 1.2.1 什么是Redis 2
  • 1.2.2 Redis成为缓存事实标准的原因 3
  • 1.3 分布式利器ZooKeeper 3
  • 1.3.1 什么是ZooKeeper 3
  • 1.3.2 ZooKeeper的优势 4
  • 1.4 高并发IM的综合实践 4
  • 1.4.1 高并发IM的学习价值 4
  • 1.4.2 庞大的应用场景 5
  • 1.5 Netty、Redis、ZooKeeper实践计划 5
  • 1.5.1 第1天:Java NIO实践 5
  • 1.5.2 第2天:Reactor反应器模式实践 6
  • 1.5.3 第3天:异步回调模式实践 7
  • 1.5.4 第4天:Netty基础实践 8
  • 1.5.5 第5天:解码器(Decoder)与编码器(Encoder)实践 9
  • 1.5.6 第6天:JSON和ProtoBuf序列化实践 11
  • 1.5.7 第7~10天:基于Netty的单聊实战 12
  • 1.5.8 第11天:ZooKeeper实践计划 14
  • 1.5.9 第12天:Redis实践计划 14
  • 1.6 本章小结 16
  • 第2章 高并发IO的底层原理 17
  • 2.1 IO读写的基础原理 17
  • 2.1.1 内核缓冲区与进程缓冲区 18
  • 2.1.2 详解典型的系统调用流程 18
  • 2.2 四种主要的IO模型 19
  • 2.2.1 同步阻塞IO(Blocking IO) 20
  • 2.2.2 同步非阻塞NIO(None Blocking IO) 21
  • 2.2.3 IO多路复用模型(IO Multiplexing) 22
  • 2.2.4 异步IO模型(Asynchronous IO) 23
  • 2.3 通过合理配置来支持百万级并发连接 24
  • 2.4 本章小结 26
  • 第3章 Java NIO通信基础详解 27
  • 3.1 Java NIO简介 27
  • 3.1.1 NIO和OIO的对比 28
  • 3.1.2 通道(Channel) 28
  • 3.1.3 Selector 选择器 28
  • 3.1.4 缓冲区(Buffer) 29
  • 3.2 详解NIO Buffer类及其属性 29
  • 3.2.1 Buffer类 29
  • 3.2.2 Buffer类的重要属性 29
  • 3.2.3 4个属性的小结 31
  • 3.3 详解NIO Buffer类的重要方法 31
  • 3.3.1 allocate()创建缓冲区 31
  • 3.3.2 put()写入到缓冲区 32
  • 3.3.3 flip()翻转 33
  • 3.3.4 get()从缓冲区读取 34
  • 3.3.5 rewind()倒带 35
  • 3.3.6 mark( )和reset( ) 37
  • 3.3.7 clear( )清空缓冲区 38
  • 3.3.8 使用Buffer类的基本步骤 38
  • 3.4 详解NIO Channel(通道)类 38
  • 3.4.1 Channel(通道)的主要类型 39
  • 3.4.2 FileChannel文件通道 39
  • 3.4.3 使用FileChannel完成文件复制的实践案例 41
  • 3.4.4 SocketChannel套接字通道 42
  • 3.4.5 使用SocketChannel发送文件的实践案例 44
  • 3.4.6 DatagramChannel数据报通道 46
  • 3.4.7 使用DatagramChannel数据包通道发送数据的实践案例 47
  • 3.5 详解NIO Selector选择器 49
  • 3.5.1 选择器以及注册 49
  • 3.5.2 SelectableChannel可选择通道 50
  • 3.5.3 SelectionKey选择键 50
  • 3.5.4 选择器使用流程 50
  • 3.5.5 使用NIO实现Discard服务器的实践案例 52
  • 3.5.6 使用SocketChannel在服务器端接收文件的实践案例 54
  • 3.6 本章小结 57
  • 第4章 鼎鼎大名的Reactor反应器模式 59
  • 4.1 Reactor反应器模式为何如此重要 59
  • 4.1.1 为什么首先学习Reactor反应器模式 59
  • 4.1.2 Reactor反应器模式简介 60
  • 4.1.3 多线程OIO的致命缺陷 60
  • 4.2 单线程Reactor反应器模式 62
  • 4.2.1 什么是单线程Reactor反应器 62
  • 4.2.2 单线程Reactor反应器的参考代码 63
  • 4.2.3 一个Reactor反应器版本的EchoServer实践案例 65
  • 4.2.4 单线程Reactor反应器模式的缺点 67
  • 4.3 多线程的Reactor反应器模式 68
  • 4.3.1 多线程池Reactor反应器演进 68
  • 4.3.2 多线程Reactor 反应器的实践案例 68
  • 4.3.3 多线程Handler处理器的实践案例 70
  • 4.4 Reactor反应器模式小结 72
  • 4.5 本章小结 73
  • 第5章 并发基础中的Future异步回调模式 74
  • 5.1 从泡茶的案例说起 74
  • 5.2 join异步阻塞 75
  • 5.2.1 线程的join合并流程 75
  • 5.2.2 使用join实现异步泡茶喝的实践案例 75
  • 5.2.3 详解join合并方法 77
  • 5.3 FutureTask异步回调之重武器 77
  • 5.3.1 Callable接口 77
  • 5.3.2 初探FutureTask类 78
  • 5.3.3 Future接口 79
  • 5.3.4 再探FutureTask类 79
  • 5.3.5 使用FutureTask类实现异步泡茶喝的实践案例 80
  • 5.4 Guava的异步回调 82
  • 5.4.1 详解FutureCallback 82
  • 5.4.2 详解ListenableFuture 83
  • 5.4.3 ListenableFuture异步任务 84
  • 5.4.4 使用Guava实现泡茶喝的实践案例 84
  • 5.5 Netty的异步回调模式 87
  • 5.5.1 详解GenericFutureListener接口 87
  • 5.5.2 详解Netty的Future接口 88
  • 5.5.3 ChannelFuture的使用 88
  • 5.5.4 Netty的出站和入站异步回调 89
  • 5.6 本章小结 90
  • 第6章 Netty原理与基础 91
  • 6.1 第一个Netty的实践案例DiscardServer 91
  • 6.1.1 创建第一个Netty项目 91
  • 6.1.2 第一个Netty服务器端程序 92
  • 6.1.3 业务处理器NettyDiscardHandler 93
  • 6.1.4 运行NettyDiscardServer 94
  • 6.2 解密Netty中的Reactor反应器模式 95
  • 6.2.1 回顾Reactor反应器模式中IO事件的处理流程 95
  • 6.2.2 Netty中的Channel通道组件 96
  • 6.2.3 Netty中的Reactor 反应器 96
  • 6.2.4 Netty中的Handler处理器 97
  • 6.2.5 Netty的流水线(Pipeline) 98
  • 6.3 详解Bootstrap启动器类 100
  • 6.3.1

上一篇:Spark编程基础:Scala版  下一篇:Revit2019参数化从入门到精通

展开 +

收起 -

Netty 相关电子书
Netty 学习笔记
网友NO.330081

使用Netty解决TCP粘包和拆包问题过程详解

前言 上一篇我们介绍了如果使用Netty来开发一个简单的服务端和客户端,接下来我们来讨论如何使用解码器来解决TCP的粘包和拆包问题 TCP为什么会粘包/拆包 我们知道,TCP是以一种流的方式来进行网络转播的,当tcp三次握手简历通信后,客户端服务端之间就建立了一种通讯管道,我们可以想象成自来水管道,流出来的水是连城一片的,是没有分界线的。 TCP底层并不了解上层的业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分。 所以对于我们应用层而言。我们直观是发送一个个连续完整TCP数据包的,而在底层就可能会出现将一个完整的TCP拆分成多个包发送或者将多个包封装成一个大的数据包发送。 这就是所谓的TCP粘包和拆包。 当发生TCP粘包/拆包会发生什么情况 我们举一个简单例子说明: 客户端向服务端发送两个数据包:第一个内容为 123;第二个内容为456。服务端接受一个数据并做相应的业务处理(这里就是打印接受数据加一个逗号)。 那么服务端输出结果将会出现下面四种情况 服务端响应结果 结论 123,456, 正常接收,没有发生粘包和拆包 123456, 异常接收,发生tcp粘包 123,4,56, 异常接收,发生tcp拆包 12,3456, 异常接收,发生tcp拆包和粘包 如何解决 主流的协议解决方案可以归纳如下: 消息定长……

网友NO.281356

spring boot整合netty的实现方法

之前花了几天去研究怎么使用netty做一个网关服务器,虽然最后还是没能用上我做的网关,但是呢netty是会用了,总结一下netty和spring boot整合。感觉不用spring boot都不会写代码了。哈哈哈 在pom文件中添加相关的依赖,这里主要的就是netty的依赖,spring boot的相关依赖本文不提 dependency groupIdio.netty/groupId artifactIdnetty-all/artifactId version4.1.19.Final/version /dependency dependency groupIdSpringBoot-Netty/groupId artifactIdSpringBoot-Netty/artifactId version1.0-SNAPSHOT/version /dependency 在application.yml文件中配置 #不能用localhost,否则启动报异常:Unresolved address#tcp监听的端口tcp: port: 8090# bossGroup的线程数boss: thread: count: 2# worker的线程数worker: thread: count: 2#是否使用长连接so: keepalive: true backlog: 100 3.编写NettyConfig netty的配置。 package com.advsun.netty.config;import com.advsun.netty.handlers.StringProtocolInitalizer;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelOption;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioServerSocketChannel;import io.netty.handler.codec.string.StringDecoder;import io.netty.handler.codec.string.StringEncoder;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotatio……

网友NO.760250

Spring Boot集成netty实现客户端服务端交互示例详解

前言 Netty 是一个高性能的 NIO 网络框架,本文主要给大家介绍了关于SpringBoot集成netty实现客户端服务端交互的相关内容,下面来一起看看详细的介绍吧 看了好几天的netty实战,慢慢摸索,虽然还没有摸着很多门道,但今天还是把之前想加入到项目里的 一些想法实现了,算是有点信心了吧(讲真netty对初学者还真的不是很友好......) 首先,当然是在SpringBoot项目里添加netty的依赖了,注意不要用netty5的依赖,因为已经废弃了 !--netty--dependency groupIdio.netty/groupId artifactIdnetty-all/artifactId version4.1.32.Final/version/dependency 将端口和IP写入application.yml文件里,我这里是我云服务器的内网IP,如果是本机测试,用127.0.0.1就ok netty: port: 7000 url: 172.16.0.7 在这之后,开始写netty的服务器,这里服务端的逻辑就是将客户端发来的信息返回回去 因为采用依赖注入的方法实例化netty,所以加上@Component注释 package com.safelocate.app.nettyServer;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioServerSocketChannel;import org.apache.log4j.Logger;import org.springframework.stereotype.Component;import java.net.InetSocketAddress;@Componentpublic class NettyServer { //logger private static final Logger logger = Logger.getLogger(NettyServer.class); public void start(InetSocketAddress address){ EventLoo……

网友NO.870745

spring+netty服务器搭建的方法

游戏一般是长连接,自定义协议,不用http协议,BIO,NIO,AIO这些我就不说了,自己查资料 我现在用spring+netty搭起简单的游戏服 思路:1自定义协议和协议包;2spring+netty整合;3半包粘包处理,心跳机制等;4请求分发(目前自己搞的都是单例模式) 下个是测试用的,结构如下 首先自定义包头 Header.java package com.test.netty.message; /** * Header.java * 自定义协议包头 * @author janehuang * @version 1.0 */ public class Header { private byte tag; /* 编码*/ private byte encode; /*加密*/ private byte encrypt; /*其他字段*/ private byte extend1; /*其他2*/ private byte extend2; /*会话id*/ private String sessionid; /*包的长度*/ private int length = 1024; /*命令*/ private int cammand; public Header() { } public Header(String sessionid) { this.encode = 0; this.encrypt = 0; this.sessionid = sessionid; } public Header(byte tag, byte encode, byte encrypt, byte extend1, byte extend2, String sessionid, int length, int cammand) { this.tag = tag; this.encode = encode; this.encrypt = encrypt; this.extend1 = extend1; this.extend2 = extend2; this.sessionid = sessionid; this.length = length; this.cammand = cammand; } @Override public String toString() { return "header [tag=" + tag + "encode=" + encode + ",encrypt=" + encrypt + ",extend1=" + extend1 + ",extend2=" + extend2 + ",sessionid=" + sessionid + ",length=" + length + ",cammand=" + cammand + "]"; } public byte getTag() { return t……

dangdang

dangdang 发起

资源
46
粉丝
8
喜欢
218
评论
2

    Copyright 2018-2019 xz577.com 码农之家

    版权责任说明