English
0 {{sellerTotalView > 1 ? __("sellers") : __("seller") }}, 0 {{numTotalView > 1 ? __("items") : __("item") }}

Yamibuy

Nickname

请告诉我们怎么更好地称呼你

更新你的名字
账户 订单 收藏
邀请好友 $10+
退出登录

切换配送区域

不同区域的库存和配送时效可能存在差异.

历史邮编
yamibuy

京东图书

Netty权威指南(第2版)

{{buttonTypePin == 3 ? __("Scan to view more PinGo") : __("Scan to stat")}}

Netty权威指南(第2版)

{{__(":people-members", {'people': item.limit_people_count})}} {{ itemCurrency }}{{ item.valid_price }} {{ itemCurrency }}{{ item.invalid_price }} {{ itemDiscount }}
后结束
{{ itemCurrency }}{{ item.valid_price }}
{{ itemCurrency }}{{ priceFormat(item.valid_price / item.bundle_specification) }}/{{ item.unit }}
{{ itemDiscount }}
{{ itemCurrency }}{{ item.valid_price }} {{ itemCurrency }}{{ priceFormat(item.valid_price / item.bundle_specification) }}/{{ item.unit }} {{ itemCurrency }}{{ item.invalid_price }} {{itemDiscount}}
{{ itemCurrency }}{{ item.valid_price }}
后结束促销
后开始秒杀 后结束秒杀
{{ getSeckillDesc(item.seckill_data) }}
{{ __( "Pay with Gift Card to get sale price: :itemCurrency:price", { 'itemCurrency' : itemCurrency, 'price' : (item.giftcard_price ? priceFormat(item.giftcard_price) : '0.00') } ) }} ({{ itemCurrency }}{{ priceFormat(item.giftcard_price / item.bundle_specification) }}/{{ item.unit }}) 详情
商品有效期

已下架

当前地址无法配送
已售完
加入收藏 已加入收藏
{{ $isZh ? coupon.coupon_name_sub : coupon.coupon_ename_sub | formatCurrency }}
{{__("Buy Directly")}} {{ itemCurrency }}{{ item.directly_price }}
数量
{{ quantity }}
{{ instockMsg }}
{{ limitText }}
{{buttonTypePin == 3 ? __("Scan to view more PinGo") : __("Scan to stat")}}

商品描述

展开全部描述
编辑推荐

1、Hadoop、Storm、Spark、Facebook、Twitter、阿里巴巴都在使用Java高性能NIO通信框架Netty,本书告诉你Why,通过本书你可以全面、系统地理解Netty 架构设计理念,以及异步NIO 编程。
2、本书作者为资深一线专家,在产品中广泛应用了Netty等NIO框架,具有丰富的多年实践经验,这就使得本书内容带有很强的实践性,让你更全面快速掌握Java高并发异步通信的优选框架Netty的用法。
3、本书第一版出版后受到业界的一致好评,应读者的要求,第2版增加了MessagePack 编解码、服务端创建、客户端创建、高性能之道、可靠性、安全性等内容,内容更精彩。
Netty是什么?使用Netty能够做什么?为什么要从传统的Socket开发切换到NIO进行编程?为什么不直接基于JDK的NIO类库编程而选择Netty?如何全面系统地掌握Netty进行NettyNIO开发、Netty编解码开发、Netty多协议开发?如何通过对Netty源码的学习获得更深入地知识?掌握了Netty后,如何将其应用到实际架构中?Netty工程师的就业前景和可涉足的行业是怎样的?本书都会一一解答。

海报:

/

内容简介

本书是异步非阻塞通信领域的经典之作,基于全新版本的Netty 5.0 编写,是国内首本深入介绍Netty 原理和架构的书籍,也是作者多年实战经验的总结和浓缩。内容不仅包含Java NIO入门知识、Netty 的基础功能开发指导、编解码框架定制等,还包括私有协议栈定制和开发、Netty 核心类库源码分析,以及Netty 的架构剖析。

作者简介

李林峰,Netty中国推广者,现华为技术有限公司平台中间件架构与设计部设计师,公司总裁技术创新奖获得者。长期从事高性能通信软件的架构设计和开发工作,有多年在NIO领域的设计、开发和运维经验,精通NIO编程和Netty、Mina等主流NIO框架。

精彩书评

★林锋让我给这本新书写个推荐,不胜荣幸。我和林锋接触时间不长,已经感受到了他对技术的热爱和不尽探索。这种热爱完全来自于内心的驱动,不掺杂任何杂质,我认为他是我见到的为数不多的技术热爱者。也正是因为这种热爱,促使林锋花费了很多业余时间,完成了这样一本对Netty的专业编程指南。相信读者在阅读此书时,在感叹内容之丰富详实的同时,也会深深感受到林锋对所著技术的热爱。我想这就是我们通过书中文字相遇的初衷吧。当我们的技术能够日益精进,达到专业的水准,生产力会成倍甚至指数级地增长。希望读者能够通过阅读此书获取这种精进的力量。
——IBM中国开发实验室开发总监 黄省江

★Netty的卓越之处在于它是一个高性能、异步事件驱动的NIO框架,目前很多著名的开源框架开始将底层的通信框架切换到Netty,如Hadoop、Storm等,Facebook的后台也即将启用这一优秀框架。希望这本书的面市能够对Netty在国内的发展起到推动作用。
——Facebook资深工程师 覃超

★中国很大的阅读类应用——中国移动手机阅读基地,每天承受着5~7.5亿PV的访问量,为了实现业务的弹性,华为Digital SDP产品承接了对其后台进行微服务重构的工作,一个PV背后的后台原子接口访问达到几十乃至上百次,还要保证90%的页面访问在500ms内响应,在这样的压力下,高效的通信机制尤其重要,林锋基于Netty构建的对等通信虚拟总线很好地承载了这一需求。平均通信时延0.71ms,80%以上的通信时延都保持在1ms以下,其余通信时延都低于3ms,在响应速度这一重要指标上不仅满足了客户的要求,而且还带来了系统可伸缩性和弹性上的巨大提升,林锋在本书中阐释的Netty应用上的经验和技巧绝对值得期待。
——华为Digital SDP首席架构师 王慷

★设计开发基于异步编程模型的高性能服务器,除了理解和熟练应用NIO等这些Java层面的基础知识之外,能够驾驭优秀的异步通信框架也是非常重要的,Netty无疑是Java领域值得学习和研究的异步事件驱动的NIO框架。作者有着多年的NIO开发和运维经验,本书浓缩了作者多年实战经验,推荐给对Netty技术感兴趣、想研究的攻城狮阅读!
——蚂蚁金服基础技术部JVM Architect 李三红

★Netty是一个令人惊讶的项目,在短短几年内成为众多Java高并发异步通信的优选框架。但目前国内资料极少并缺乏系统性,而李兄的这本系统介绍Netty开发和原理的书籍,很完美地填补了这个空白。国内的技术人员对Java NIO和Netty的理解多一些,也就意味着国内整体网络编程技术的进步。本书条理清晰,对技术的阐述循序渐进,是一本难得的Netty学习教材,推荐有志青年仔细学习研究本书,共同把NIO异步通信编程推向一个新高度。
——JBoss应用服务器核心开发组成员 张建锋
目录

基础篇 走进Java NIO
第1 章 Java 的I/O 演进之路......2
1.1 I/O 基础入门......3
1.1.1 Linux 网络I/O 模型简介......3
1.1.2 I/O 多路复用技术......6
1.2 Java 的I/O 演进......8
1.3 总结...... 10
第2 章 NIO 入门...... 11
2.1 传统的BIO 编程...... 11
2.1.1 BIO 通信模型图...... 12
2.1.2 同步阻塞式I/O 创建的TimeServer 源码分析...... 13
2.1.3 同步阻塞式I/O 创建的TimeClient 源码分析...... 16
2.2 伪异步I/O 编程...... 18
2.2.1 伪异步I/O 模型图...... 19
2.2.2 伪异步I/O 创建的TimeServer 源码分析...... 19
2.2.3 伪异步I/O 弊端分析...... 21
2.3 NIO 编程...... 24
2.3.1 NIO 类库简介...... 24
2.3.2 NIO 服务端序列图...... 28
2.3.3 NIO 创建的TimeServer 源码分析...... 30
2.3.4 NIO 客户端序列图...... 36
2.3.5 NIO 创建的TimeClient 源码分析...... 39
2.4 AIO 编程...... 45
2.4.1 AIO 创建的TimeServer 源码分析...... 46
2.4.2 AIO 创建的TimeClient 源码分析...... 51
2.4.3 AIO 版本时间服务器运行结果...... 56
2.5 4 种I/O 的对比...... 58
2.5.1 概念澄清...... 58
2.5.2 不同I/O 模型对比...... 59
2.6 选择Netty 的理由...... 60
2.6.1 不选择Java 原生NIO 编程的原因...... 61
2.6.2 为什么选择Netty ...... 62
2.7 总结...... 63

入门篇 Netty NIO 开发指南

第3 章 Netty 入门应用...... 66
3.1 Netty 开发环境的搭建...... 66
3.1.1 下载Netty 的软件包...... 67
3.1.2 搭建Netty 应用工程...... 67
3.2 Netty 服务端开发...... 68
3.3 Netty 客户端开发...... 73
3.4 运行和调试...... 76
3.4.1 服务端和客户端的运行...... 76
3.4.2 打包和部署...... 77
3.5 总结...... 77
第4 章 TCP 粘包/拆包问题的解决之道...... 79
4.1 TCP 粘包/拆包...... 79
4.1.1 TCP 粘包/拆包问题说明...... 80
4.1.2 TCP 粘包/拆包发生的原因...... 80
4.1.3 粘包问题的解决策略...... 81
4.2 未考虑TCP 粘包导致功能异常案例...... 82
4.2.1 TimeServer 的改造...... 82
4.2.2 TimeClient 的改造...... 83
4.2.3 运行结果...... 84
4.3 利用LineBasedFrameDecoder 解决TCP 粘包问题...... 85
4.3.1 支持TCP 粘包的TimeServer ...... 86
4.3.2 支持TCP 粘包的TimeClient...... 88
4.3.3 运行支持TCP 粘包的时间服务器程序...... 90
4.3.4 LineBasedFrameDecoder 和StringDecoder 的原理分析...... 91
4.4 总结...... 92
第5 章 分隔符和定长解码器的应用...... 93
5.1 DelimiterBasedFrameDecoder 应用开发...... 94
5.1.1 DelimiterBasedFrameDecoder 服务端开发...... 94
5.1.2 DelimiterBasedFrameDecoder 客户端开发...... 97
5.1.3 运行DelimiterBasedFrameDecoder 服务端和客户端...... 99
5.2 FixedLengthFrameDecoder 应用开发...... 101
5.2.1 FixedLengthFrameDecoder 服务端开发...... 101
5.2.2 利用telnet 命令行测试EchoServer 服务端...... 103
5.3 总结...... 104

中级篇 Netty 编解码开发指南

第6 章 编解码技术...... 106
6.1 Java 序列化的缺点...... 107
6.1.1 法跨语言...... 107
6.1.2 序列化后的码流太大...... 107
6.1.3 序列化性能太低...... 110
6.2 业界主流的编解码框架...... 113
6.2.1 Google 的Protobuf 介绍...... 113
6.2.2 Facebook 的Thrift 介绍...... 115
6.2.3 JBoss Marshalling 介绍...... 116
6.3 总结...... 117
第7 章 MessagePack 编解码...... 118
7.1 MessagePack 介绍...... 118
7.1.1 MessagePack 多语言支持...... 119
7.1.2 MessagePack Java API 介绍...... 119
7.1.3 MessagePack 开发包下载...... 120
7.2 MessagePack 编码器和解码器开发...... 120
7.2.1 MessagePack 编码器开发...... 120
7.2.2 MessagePack 解码器开发...... 121
7.2.3 功能测试...... 121
7.3 粘包/半包支持...... 124
7.4 总结...... 127
第8 章 Google Protobuf 编解码...... 128
8.1 Protobuf 的入门...... 129
8.1.1 Protobuf 开发环境搭建...... 129
8.1.2 Protobuf 编解码开发...... 131
8.1.3 运行Protobuf 例程...... 133
8.2 Netty 的Protobuf 服务端开发...... 133
8.2.1 Protobuf 版本的图书订购服务端开发...... 134
8.2.2 Protobuf 版本的图书订购客户端开发...... 136
8.2.3 Protobuf 版本的图书订购程序功能测试...... 139
8.3 Protobuf 的使用注意事项...... 140
8.4 总结...... 142
第9 章 JBoss Marshalling 编解码...... 143
9.1 Marshalling 开发环境准备...... 143
9.2 Netty 的Marshalling 服务端开发...... 144
9.3 Netty 的Marshalling 客户端开发...... 147
9.4 运行Marshalling 客户端和服务端例程...... 149
9.5 总结...... 150

高级篇 Netty 多协议开发和应用

第10 章 HTTP 协议开发应用...... 154
10.1 HTTP 协议介绍...... 155
10.1.1 HTTP 协议的URL ...... 155
10.1.2 HTTP 请求消息(HttpRequest)...... 155
10.1.3 HTTP 响应消息(HttpResponse) ...... 158
10.2 Netty HTTP 服务端入门开发...... 159
10.2.1 HTTP 服务端例程场景描述...... 160
10.2.2 HTTP 服务端开发...... 160
10.2.3 Netty HTTP 文件服务器例程运行结果...... 166
10.3 Netty HTTP+XML 协议栈开发...... 170
10.3.1 开发场景介绍...... 171
10.3.2 HTTP+XML 协议栈设计...... 174
10.3.3 高效的XML 绑定框架JiBx ...... 175
10.3.4 HTTP+XML 编解码框架开发...... 183
10.3.5 HTTP+XML 协议栈测试...... 199
10.3.6 小结...... 201
10.4 总结...... 202
第11 章 WebSocket 协议开发...... 203
11.1 HTTP 协议的弊端...... 204
11.2 WebSocket 入门...... 204
11.2.1 WebSocket 背景...... 205
11.2.2 WebSocket 连接建立...... 206
11.2.3 WebSocket 生命周期...... 207
11.2.4 WebSocket 连接关闭...... 208
11.3 Netty WebSocket 协议开发...... 209
11.3.1 WebSocket 服务端功能介绍...... 209
11.3.2 WebSocket 服务端开发...... 210
11.3.3 运行WebSocket 服务端...... 218
11.4 总结...... 219
第12 章 私有协议栈开发...... 221
12.1 私有协议介绍...... 221
12.2 Netty 协议栈功能设计...... 223
12.2.1 网络拓扑图...... 223
12.2.2 协议栈功能描述...... 224
12.2.3 通信模型...... 224
12.2.4 消息定义...... 225
12.2.5 Netty 协议支持的字段类型...... 226
12.2.6 Netty 协议的编解码规范...... 227
12.2.7 链路的建立...... 229
12.2.8 链路的关闭...... 230
12.2.9 可靠性设计...... 230
12.2.10 安全性设计...... 232
12.2.11 可扩展性设计...... 232
12.3 Netty 协议栈开发...... 233
12.3.1 数据结构定义...... 233
12.3.2 消息编解码...... 237
12.3.3 握手和安全认证...... 241
12.3.4 心跳检测机制...... 245
12.3.5 断连重连...... 248
12.3.6 客户端代码...... 249
12.3.7 服务端代码...... 251
12.4 运行协议栈...... 252
12.4.1 正常场景...... 252
12.4.2 异常场景:服务端宕机重启...... 253
12.4.3 异常场景:客户端宕机重启...... 256
12.5 总结...... 256
第13 章 服务端创建...... 258
13.1 原生NIO 类库的复杂性...... 259
13.2 Netty 服务端创建源码分析...... 259
13.2.1 Netty 服务端创建时序图...... 260
13.2.2 Netty 服务端创建源码分析...... 263
13.3 客户端接入源码分析...... 272
13.4 总结...... 275
第14 章 客户端创建...... 276
14.1 Netty 客户端创建流程分析...... 276
14.2.1 Netty 客户端创建时序图...... 276
14.2.2 Netty 客户端创建流程分析...... 277
14.2 Netty 客户端创建源码分析...... 278
14.2.1 客户端连接辅助类Bootstrap...... 278
14.2.2 客户端连接操作...... 281
14.2.3 异步连接结果通知...... 283
14.2.4 客户端连接超时机制...... 284
14.3 总结...... 286

源码分析篇 Netty 功能介绍和源码分析

第15 章 ByteBuf 和相关辅助类...... 288
15.1 ByteBuf 功能说明...... 288
15.1.1 ByteBuf 的工作原理...... 289
15.1.2 ByteBuf 的功能介绍...... 294
15.2 ByteBuf 源码分析...... 308
15.2.1 ByteBuf 的主要类继承关系...... 309
15.2.2 AbstractByteBuf 源码分析...... 310
15.2.3 AbstractReferenceCountedByteBuf 源码分析...... 319
15.2.4 UnpooledHeapByteBuf 源码分析...... 321
15.2.5 PooledByteBuf 内存池原理分析...... 326
15.2.6 PooledDirectByteBuf 源码分析...... 329
15.3 ByteBuf 相关的辅助类功能介绍...... 332
15.3.1 ByteBufHolder...... 332
15.3.2 ByteBufAllocator ...... 333
15.3.3 CompositeByteBuf ...... 334
15.3.4 ByteBufUtil ...... 336
15.4 总结...... 337
第16 章 Channel 和Unsafe ...... 338
16.1 Channel 功能说明...... 338
16.1.1 Channel 的工作原理...... 339
16.1.2 Channel 的功能介绍...... 340
16.2 Channel 源码分析...... 343
16.2.1 Channel 的主要继承关系类图...... 343
16.2.2 AbstractChannel 源码分析...... 344
16.2.3 AbstractNioChannel 源码分析...... 347
16.2.4 AbstractNioByteChannel 源码分析...... 350
16.2.5 AbstractNioMessageChannel 源码分析...... 353
16.2.6 AbstractNioMessageServerChannel 源码分析...... 354
16.2.7 NioServerSocketChannel 源码分析...... 355
16.2.8 NioSocketChannel 源码分析...... 358
16.3 Unsafe 功能说明...... 364
16.4 Unsafe 源码分析...... 365
16.4.1 Unsafe 继承关系类图...... 365
16.4.2 AbstractUnsafe 源码分析...... 366
16.4.3 AbstractNioUnsafe 源码分析...... 375
16.4.4 NioByteUnsafe 源码分析...... 379
16.5 总结...... 387
第17 章 ChannelPipeline 和ChannelHandler...... 388
17.1 ChannelPipeline 功能说明...... 389
17.1.1 ChannelPipeline 的事件处理...... 389
17.1.2 自定义拦截器...... 391
17.1.3 构建pipeline ...... 392
17.1.4 ChannelPipeline 的主要特性...... 393
17.2 ChannelPipeline 源码分析...... 393
17.2.1 ChannelPipeline 的类继承关系图...... 393
17.2.2 ChannelPipeline 对ChannelHandler 的管理...... 393
17.2.3 ChannelPipeline 的inbound 事件...... 396
17.2.4 ChannelPipeline 的outbound 事件...... 397
17.3 ChannelHandler 功能说明...... 398
17.3.1 ChannelHandlerAdapter 功能说明...... 399
17.3.2 ByteToMessageDecoder 功能说明...... 399
17.3.3 MessageToMessageDecoder 功能说明...... 400
17.3.4 LengthFieldBasedFrameDecoder 功能说明...... 400
17.3.5 MessageToByteEncoder 功能说明...... 404
17.3.6 MessageToMessageEncoder 功能说明...... 404
17.3.7 LengthFieldPrepender 功能说明...... 405
17.4 ChannelHandler 源码分析...... 406
17.4.1 ChannelHandler 的类继承关系图...... 406
17.4.2 ByteToMessageDecoder 源码分析...... 407
17.4.3 MessageToMessageDecoder 源码分析...... 410
17.4.4 LengthFieldBasedFrameDecoder 源码分析...... 411
17.4.5 MessageToByteEncoder 源码分析...... 415
17.4.6 MessageToMessageEncoder 源码分析...... 416
17.4.7 LengthFieldPrepender 源码分析...... 417
17.5 总结...... 418
第18 章 EventLoop 和EventLoopGroup...... 419
18.1 Netty 的线程模型...... 419
18.1.1 Reactor 单线程模型...... 420
18.1.2 Reactor 多线程模型...... 421
18.1.3 主从Reactor 多线程模型...... 422
18.1.4 Netty 的线程模型...... 423
18.1.5 最佳实践...... 424
18.2 NioEventLoop 源码分析...... 425
18.2.1 NioEventLoop 设计原理...... 425
18.2.2 NioEventLoop 继承关系类图...... 426
18.2.3 NioEventLoop...... 427
18.3 总结...... 436
第19 章 Future 和Promise ...... 438
19.1 Future 功能...... 438
19.2 ChannelFuture 源码分析...... 443
19.3 Promise 功能介绍...... 445
19.4 Promise 源码分析...... 447
19.4.1 Promise 继承关系图...... 447
19.4.2 DefaultPromise ...... 447
19.5 总结...... 449

架构和行业应用篇 Netty 高级特性

第20 章 Netty 架构剖析...... 452
20.1 Netty 逻辑架构...... 452
20.1.1 Reactor 通信调度层...... 453
20.1.2 职责链ChannelPipeline ...... 453
20.1.3 业务逻辑编排层(Service ChannelHandler)...... 454
20.2 关键架构质量属性...... 454
20.2.1 高性能...... 454
20.2.2 可靠性...... 457
20.2.3 可定制性...... 460
20.2.4 可扩展性...... 460
20.3 总结...... 460
第21 章 Java 多线程编程在Netty 中的应用...... 461
21.1 Java 内存模型与多线程编程...... 461
21.1.1 硬件的发展和多任务处理...... 461
21.1.2 Java 内存模型...... 462
21.2 Netty 的并发编程实践...... 464
21.2.1 对共享的可变数据进行正确的同步...... 464
21.2.2 正确使用锁...... 465
21.2.3 volatile 的正确使用...... 467
21.2.4 CAS 指令和原子类...... 470
21.2.5 线程安全类的应用...... 472
21.2.6 读写锁的应用...... 476
21.2.7 线程安全性文档说明...... 477
21.2.8 不要依赖线程优先级...... 478
21.3 总结...... 479
第22 章 高性能之道...... 480
22.1 RPC 调用性能模型分析...... 480
22.1.1 传统RPC 调用性能差的三宗罪...... 480
22.1.2 I/O 通信性能三原则...... 481
22.2 Netty 高性能之道...... 482
22.2.1 异步非阻塞通信...... 482
22.2.2 高效的Reactor 线程模型...... 482
22.2.3 锁化的串行设计...... 485
22.2.4 高效的并发编程...... 486
22.2.5 高性能的序列化框架...... 486
22.2.6 零拷贝...... 487
22.2.7 内存池...... 491
22.2.8 灵活的TCP 参数配置能力...... 494
22.3 主流NIO 框架性能对比...... 495
22.4 总结...... 497
第23 章 可靠性...... 498
23.1 可靠性需求...... 498
23.1.1 宕机的代价...... 498
23.1.2 Netty 可靠性需求...... 499
23.2 Netty 高可靠性设计...... 500
23.2.1 网络通信类故障...... 500
23.2.2 链路的有效性检测...... 507
23.2.3 Reactor 线程的保护...... 510
23.2.4 内存保护...... 513
23.2.5 流量整形...... 516
23.2.6 优雅停机接口...... 519
23.3 优化建议...... 520
23.3.1 发送队列容量上限控制...... 520
23.3.2 回推发送失败的消息...... 521
23.4 总结...... 521
第24 章 安全性...... 522
24.1 严峻的安全形势...... 522
24.1.1 OpenSSL Heart bleed 漏洞...... 522
24.1.2 安全漏洞的代价...... 523
24.1.3 Netty 面临的安全风险...... 523
24.2 Netty SSL 安全特性...... 525
24.2.1 SSL 单向认证...... 525
24.2.2 SSL 双向认证...... 532
24.2.3 第三方CA 认证...... 536
24.3 Netty SSL 源码分析...... 538
24.3.1 客户端...... 538
24.3.2 服务端...... 541
24.3.3 消息读取...... 544
24.3.4 消息发送...... 545
24.4 Netty 扩展的安全特性...... 546
24.4.1 IP 地址黑名单机制...... 547
24.4.2 接入认证...... 548
24.4 总结...... 550
第25 章 Netty 未来展望...... 551
25.1 应用范围...... 551
25.2 技术演进...... 552
25.3 社区活跃度...... 552
25.4 Road Map ...... 552
25.5 总结...... 553

附录A Netty 参数配置表...... 554
精彩书摘

13.2.1Netty服务端创建时序图
下面我们对Netty服务端创建的关键步骤和原理进行讲解。
步骤1:创建ServerBootstrap实例。ServerBootstrap是Netty服务端的启动辅助类,它提供了一系列的方法用于设置服务端启动相关的参数。底层通过门面模式对各种能力进行抽象和封装,尽量不需要用户跟过多的底层API打交道,降低用户的开发难度。
我们在创建ServerBootstrap实例时,会惊讶地发现ServerBootstrap只有一个无参的构造函数,作为启动辅助类这让人不可思议,因为它需要与多个其他组件或者类交互。ServerBootstrap构造函数没有参数的根本原因是因为它的参数太多了,而且未来也可能会发生变化,为了解决这个问题,就需要引入Builder模式。《Effective Java》第二版第2条建议遇到多个构造器参数时要考虑用构建器,关于多个参数构造函数的缺点和使用构建器的优点大家可以查阅《Effective Java》,在此不再详述。
步骤2:设置并绑定Reactor线程池。Netty的Reactor线程池是EventLoopGroup,它实际就是EventLoop的数组。EventLoop的职责是处理所有注册到本线程多路复用器Selector上的Channel,Selector的轮询操作由绑定的EventLoop线程run方法驱动,在一个循环体内循环执行。值得说明的是,EventLoop的职责不仅仅是处理网络I/O事件,用户自定义的Task和定时任务Task也统一由EventLoop负责处理,这样线程模型就实现了统一。从调度层面看,也不存在在EventLoop线程中再启动其他类型的线程用于异步执行另外的任务,这样就避免了多线程并发操作和锁竞争,提升了I/O线程的处理和调度性能。
步骤3:设置并绑定服务端Channel。作为NIO服务端,需要创建ServerSocketChannel,Netty对原生的NIO类库进行了封装,对应实现是NioServerSocketChannel。对于用户而言,不需要关心服务端Channel的底层实现细节和工作原理,只需要指定具体使用哪种服务端Channel即可。因此,Netty的ServerBootstrap方法提供了channel方法用于指定服务端Channel的类型。Netty通过工厂类,利用反射创建NioServerSocketChannel对象。由于服务端监听端口往往只需要在系统启动时才会调用,因此反射对性能的影响并不大。相关代码如下。
public ServerBootstrap channel(Class channelClass) {
if (channelClass == null) {
throw new NullPointerException("channelClass");
}
return channelFactory(new ServerBootstrapChannelFactory(channelClass));
}
步骤4:链路建立的时候创建并初始化ChannelPipeline。ChannelPipeline并不是NIO服务端必需的,它本质就是一个负责处理网络事件的职责链,负责管理和执行ChannelHandler。网络事件以事件流的形式在ChannelPipeline中流转,由ChannelPipeline根据ChannelHandler的执行策略调度ChannelHandler的执行。典型的网络事件如下。
(1)链路注册;
(2)链路激活;
(3)链路断开;
(4)接收到请求消息;
(5)请求消息接收并处理完毕;
(6)发送应答消息;
(7)链路发生异常;
(8)发生用户自定义事件。
步骤5:初始化ChannelPipeline完成之后,添加并设置ChannelHandler。ChannelHandler是Netty提供给用户定制和扩展的关键接口。利用ChannelHandler用户可以完成大多数的功能定制,例如消息编解码、心跳、安全认证、TSL/SSL认证、流量控制和流量整形等。Netty同时也提供了大量的系统ChannelHandler供用户使用,比较实用的系统ChannelHandler总结如下。
(1)系统编解码框架——ByteToMessageCodec;
(2)通用基于长度的半包解码器——LengthFieldBasedFrameDecoder;
(3)码流日志打印Handler——LoggingHandler;
(4)SSL安全认证Handler——SslHandler;
(5)链路空闲检测Handler——IdleStateHandler;
(6)流量整形Handler——ChannelTrafficShapingHandler;
(7)Base64编解码——Base64Decoder和Base64Encoder。
创建和添加ChannelHandler的代码示例如下。
.childHandler(new ChannelInitializer() {
@Override
public void initChannel(SocketChannel ch)
throws Exception {
ch.pipeline().addLast(
new EchoServerHandler());
}
});
步骤6:绑定并启动监听端口。在绑定监听端口之前系统会做一系列的初始化和检测工作,完成之后,会启动监听端口,并将ServerSocketChannel注册到Selector上监听客户端连接,相关代码如下。
protected void doBind(SocketAddress localAddress) throws Exception {
javaChannel().socket().bind(localAddress, config.getBacklog());
}
步骤7:Selector轮询。由Reactor线程NioEventLoop负责调度和执行Selector轮询操作,选择准备就绪的Channel集合,相关代码如下。
private void select() throws IOException {
Selector selector = this.selector;
try {
//此处代码省略......
int selectedKeys = selector.select(timeoutMillis);
selectCnt ++;
//此处代码省略......
}
步骤8:当轮询到准备就绪的Channel之后,就由Reactor线程NioEventLoop执行ChannelPipeline的相应方法,最终调度并执行ChannelHandler,接口如图13-2所示。
步骤9:执行Netty系统ChannelHandler和用户添加定制的ChannelHandler。ChannelPipeline根据网络事件的类型,调度并执行ChannelHandler,相关代码如下。
public ChannelHandlerContext fireChannelRead(Object msg) {
DefaultChannelHandlerContext next = findContextInbound(MASK_CHANNEL_READ);
next.invoker.invokeChannelRead(next, msg);
return this;
……

前言/序言

2014 年6 月《Netty 权威指南》第1 版面世之后,很多读者通过邮件等方式向我表达了对本书的喜爱和赞誉。同时,对本书的一些瑕疵和不足也进行了指正,并给出了合理的建议。我对读者反馈的合理建议进行了记录和总结,以期在未来修订版或者第2 版中能够修正这些问题。
大约在2014 年11 月份的时候,编辑与我协商出版《Netty 权威指南(第2 版)》的事宜,考虑到如下几个因素,最终我决定推出第2 版:
◎ 第一版需要修正少部分印刷不太清晰的图片,这会改变后续章节的页码;
◎ 源码分析章节的代码希望重新编排一下,与前面的开发示例保持一致;
◎ 部分章节和内容需要优化调整;
◎ 部分读者对推出第2 版的要求。
第2 版的主要变更如下,删除第1 版中的如下章节:
◎ 第7 章:Java 序列化;
◎ 第12 章:UDP 协议开发;
◎ 第13 章:文件传输;
◎ 第22 章:Netty 行业应用。
新增本书中的如下章节:
◎ 第7 章:MessagePack 编解码;
◎ 第13 章:服务端创建;
◎ 第14 章:客户端创建;
◎ 第22 章:高性能之道;
◎ 第23 章:可靠性;
◎ 第24 章:安全性。
第1 版最初的想法是尽量照顾NIO 编程和Netty 初学者,因此入门和基础功能使用示例占了很大比例,涵盖的范围也很广。但事实上,由于Netty 的功能过于庞杂,一本书很难涵盖Netty 的所有功能点,因此,删除了不太常用的Java 序列化、UDP 协议开发和文件传输。
Netty 行业应用的内容很多读者都很期望,希望能够展开详细讲解一下。我思索再三,忍痛割爱,不仅没有加强本章节,反而删除了它。为什么呢?对于真正想了解行业应用的读者,需要展开详细讲解才能够讲透,剖开Netty 在Spark、Hadoop 等大数据领域的应用不谈,即便是作为分布式服务框架的内部高性能通信组件,例如Dubbo,没有大篇幅也很难讲透,与其一笔概括,泛泛而谈,还不如留给其他作者或者未来抽空单独梳理。
掌握Netty 的基础功能使用比较容易,但是理解Netty 底层的架构以及主要架构特性的设计理念却是件困难的事情,它需要长期的行业积累以及对Netty 底层源码的透彻理解。应广大读者的要求,在第2 版中新增了Netty 的高性能、安全性和可靠性的架构剖析,通过这些章节的学习,读者可以更加清晰地理解Netty 架构设计理念。
尽管我本人已经有7 年的NIO 编程和实战经验,在产品中也广泛应用了Netty 和Mina等NIO 框架。但是,受限于个人能力和水平,本书一定还有纰漏和不妥之处,希望广大读者能够批评指正。读者在阅读本书或者实际工作中如果有Netty 相关的疑问,也可以直接联系我,我会尽量回复。我的联系方式如下:
◎ 邮箱:neu_lilinfeng@sina.com
◎ 新浪微博:Nettying
◎ 微信:Nettying。
《Netty 权威指南》第1 版出版之后,很多读者来信咨询自己实际工作和学习中遇到的Netty 问题和案例,有些案例和问题颇具典型性。我将这些案例进行了总结,在微信公众号“Netty 之家”中定期推送,希望广大读者可以关注。
感谢博文视点的小编丁一琼MM 和幕后的美工,正是你们的辛苦工作才保证了本书能够顺利出版;感谢华为IT PaaS 望岳、莫小君和Digital SDP 集成开发部徐皓等领导对我的信任和支持;感谢我的老婆在我编辑第2 版期间赦免了我做饭和刷碗的义务,我得以抽出时间安心写作。
最后感谢《Netty 权威指南》第1 版的读者,你们的理解、鼓励和支持,使我有足够的勇气和动力继续前行。希望大家携起手来共同推动NIO 编程和Netty 在国内的应用和发展。
李林锋
2015 年1 月27 日于南京
第1版前言
大约在2008 年的时候,我参与设计和开发的一个电信系统在月初出账期,总是发生大量的连接超时和读写超时异常,业务的失败率相比于平时高了很多,报表中的很多指标都差强人意。后来经过排查,发现问题主要出现在下游网元的处理性能上,月初的时候BSS 出账,在出账期间BSS 系统运行缓慢,由于双方采用了同步阻塞式的HTTP+XML 进行通信,导致任何一方处理缓慢都会影响对方的处理性能。按照故障隔离的设计原则,对方处理速度慢或者不回应,不应该影响系统的其他功能模块或者协议栈,但是在同步阻塞I/O 通信模型下,这种故障传播和相互影响是不可避免的,很难通过业务层面解决。
受限于当时Tomcat 和Servlet 的同步阻塞I/O 模型,以及在Java 领域异步HTTP 协议栈的技术积累不足,当时我们并没有办法完全解决这个问题,只能通过调整线程池策略和HTTP 超时时间来从业务层面做规避。
2009 年,由于对技术的热爱,我作为业务骨干被领导派去参加一个重点业务平台的研发工作,与两位资深的架构师(其中一位工作20 年,做华为交换机出身)共同参与。这是我第一次全面接触异步I/O 编程和高性能电信级协议栈的开发,眼界大开——异步高性能内部协议栈、异步HTTP、异步SOAP、异步SMPP……所有的协议栈都是异步非阻塞的。后来的性能测试表明:基于Reactor 模型统一调度的长连接和短连接协议栈,无论是性能、可靠性还是可维护性,都可以“秒杀”传统基于BIO 开发的应用服务器和各种协议栈,这种差异本质上是一种代差。
在我从事异步NIO 编程的2009 年,业界还没有成熟的NIO 框架,那个时候Mina 刚刚开始起步,功能和性能都达不到商用标准。最困难的是,国内Java 领域的异步通信还没有流行,整个业界的积累都非常少。那时资料匮乏,能够交流和探讨的圈内人很少,一旦踩住“地雷”,就需要夜以继日地维护。在随后2 年多的时间里,经历了十多次的在通宵、凌晨被一线的运维人员电话吵醒等种种磨难之后,我们自研的NIO 框架才逐渐稳定和成熟。期间,解决的BUG 总计20~30 个。
从2004 年JDK 1.4 首次提供NIO 1.0 类库到现在,已经过去了整整10 年。JSR 51 的设计初衷就是让Java 能够提供非阻塞、具有弹性伸缩能力的异步I/O 类库,从而结束了Java在高性能服务器领域的不利局面。然而,在相当长的一段时间里,Java 的NIO 编程并没有流行起来,究其原因如下。
1.大多数高性能服务器,被C 和C++语言盘踞,由于它们可以直接使用操作系统的
异步I/O 能力,所以对JDK 的NIO 并不关心;
2.移动互联网尚未兴起,基于Java 的大规模分布式系统极少,很多中小型应用服务
对于异步I/O 的诉求不是很强烈;
3.高性能、高可靠性领域,例如银行、证券、电信等,依然以C++为主导,Java 充
当打杂的角色,NIO 暂时没有用武之地;
4.当时主流的J2EE 服务器,几乎全部基于同步阻塞I/O 构建,例如Servlet、Tomcat
等,由于它们应用广泛,如果这些容器不支持NIO,用户很难具备独立构建异步协议栈的
能力;
5.异步NIO 编程门槛比较高,开发和维护一款基于NIO 的协议栈对很多中小型公司
来说像是一场噩梦;
6.业界NIO 框架不成熟,很难商用;
7.国内研发界对NIO 的陌生和认识不足,没有充分重视。
基于上述几种原因,NIO 编程的推广和发展长期滞后。值得欣慰的是,随着大规模分布式系统、大数据和流式计算框架的兴起,基于Java 来构建这些系统已经成为主流,NIO编程和NIO 框架在此期间得到了大规模的商用。在互联网领域,阿里的分布式服务框架Dubbo、RocketMQ,大数据的基础序列化和通信框架Avro,以及很多开源的软件都已经开始使用Netty 来构建高性能、分布式通信能力,Netty 社区的活跃度也名列前茅。根据目前的信息,Netty 已经在如下几个领域得到了大规模的商业应用。
1.互联网领域;
2.电信领域;
3.大数据领域;
4.银行、证券等金融领域;
5.游戏行业;
6.电力等企业市场。
2014 年春节前,我分享了一篇博文《Netty 5.0 架构剖析和源码解读》,短短1 个月下
载量达到了4000 多。很多网友向我咨询NIO 编程技术、NIO 框架如何选择等问题,也有一些圈内朋友和出版社邀请我写一本关于Netty 的技术书籍。作为最流行、表现最优异的NIO 框架,Netty 深受大家喜爱,但是长期以来除了User Guide 之外,国内鲜有Netty 相关的技术书籍供广大NIO 编程爱好者学习和参考。由于Netty 源码的复杂性和NIO 编程本身的技术门槛限制,对于大多数读者而言,通过自己阅读和分析源码来深入掌握Netty 的设计原理和实现细节是件困难的事情。从2011 年开始我系统性地分析和应用了Netty 和Mina,转瞬间已经过去了3 年多。在这3 年的时间里,我们的系统经受了无数严苛的考验,在这个过程中,我对Netty 和Mina 有了更深刻的体验,也积累了丰富的运维和实战经验。我们都是开源框架Netty 的受益者,为了让更多的朋友和同行能够了解NIO 编程,深入学习和掌握Netty 这个NIO 利器,我打算将我的经验和大家分享,同时也结束国内尚无Netty学习教材的尴尬境地。
致谢
如果说个人能够改变自己命运的话,对于程序员来说,唯有通过不断地学习和实践,努力提升自己的技能,才有可能找到更好的机会,充分发挥和体现自己的价值。我希望本书能够为你的成功助一臂之力。
感谢博文视点的策划编辑丁一琼和幕后的美编,正是你们的辛苦工作才保证了本书能够顺利出版;感谢华为Netty 爱好者和关注本书的领导同事们的支持,你们的理解和鼓励为我提供了足够的勇气;感谢我的家人和老婆的支持,写书占用了我几乎所有的业余时间,没有你们的理解和支持,我很难安心写作。
最后感谢Netty 中国社区的朋友,我的微博粉丝和所有喜欢Netty 的朋友们,你们对技术的热情是鼓励我写书的最重要动力,没有你们,就没有本书。希望大家一如既往地喜欢NIO 编程,喜欢Netty,以及相互交流和分享,共同推动整个国内异步高性能通信领域的技术发展。
李林锋
2014 年5 月11 日于南京紫轩阁

规格参数

品牌 京东图书
出版时间 2015-04-01
品牌属地 中国
出版社 电子工业出版社
语言 中文
ISBN 9787121258015
版次 1
页数 572
印刷时间 2015-04-01
包装 平装
著者 李林锋
用纸 胶版纸

免责声明

产品价格、包装、规格等信息如有调整,恕不另行通知。我们尽量做到及时更新产品信息,但请以收到实物为准。使用产品前,请始终阅读产品随附的标签、警告及说明。

查看详情
由 京东图书 销售
{{ __("Ship to :shippingDist", {shippingDist: shippingDist}) }}
{{ __("Ship to United States only") }}
满$69免运费
正品保证

已加入购物车

继续逛逛

为你推荐

{{ item.brand_name }}

{{ item.item_name }}

{{ item.currency }}{{ item.market_price }}

{{ item.currency }}{{ item.unit_price }}

{{ item.currency }}{{ item.unit_price }}

优惠券

{{ coupon.coupon_name_new | formatCurrency }}
领取 已领取 已领完
{{ getCouponDescStr(coupon) }}
{{ coupon.use_time_desc }}
即将过期: {{ formatTime(coupon.use_end_time) }}

分享给好友

取消

亚米礼卡专享价

使用礼卡支付即可获得礼卡专享价

规则说明

礼卡专享价是部分商品拥有的特殊优惠价格;

购买礼卡专享价商品时,若在结算时使用电子礼卡抵扣支付,且礼卡余额足够支付订单中所有礼卡专享价商品的专享价总和,则可以启用礼卡专享价;

不使用礼卡支付,或礼卡余额不满足上一条所述要求时,将无法启用礼卡专享价,按照普通售价计算,但您仍然可以购买这些商品;

在购买礼卡专享价商品时,若余额不足,可以在购物车或结算页中点击“充值”按钮对礼卡进行购买和充值;

商品若拥有礼卡专享价,会显示“专享”的特殊价格标记;

如有疑问,请随时联系客服;

礼卡专享价相关规则最终解释权归亚米所有。

由 亚米 销售

服务保障

yamibuy 满$49免运费
yamibuy 无忧退换
yamibuy 从美国发货

配送信息

  • 美国48个州

    1. 标准配送 $5.99,最终价满$49免运费

    2. 本地配送$5.99(加州,纽约州,新泽西,麻省和宾夕法尼亚,以上州部分地区);最终价满$49免运费

  • 阿拉斯加/夏威夷

    1. 两日达(包含阿拉斯加夏威夷)

    2. 空运资费$19.99起

退换政策

亚米网希望为我们的客户提供最优秀的售后服务,让所有人都能放心在亚米购物。亚米自营商品在满足退换货条件的情况下,可在收到包裹的30天之内退换商品(食品因商品质量问题7天内可退换,其他特殊商品需联系客服咨询)。

查看详情

由 亚米 销售

亚米电子礼品卡使用规则

若购买时选择自动充值,订单完成后礼卡将自动充值到您的账户中;

若购买时选择发送邮件,订单完成后系统将自动发送卡号和密码到您填写的邮箱;

发送邮件时,任何用户均可使用邮件中的卡号密码进行礼卡充值,请妥善保管邮件信息。

如接收邮件遇到问题,请联系客服处理;

发送邮件时,若礼卡没有被兑换,可以补发邮件。若已经被其他用户兑换,则无法补偿;

亚米网电子礼卡可用于购买自营或第三方商品;

亚米网电子礼卡没有有效期限制,长期有效;

亚米网电子礼卡的金额,可分多次使用;

亚米网电子礼卡业务规则,最终解释权归亚米网所有。

退换政策

已消费的电子礼卡不支持退款。

由 京东图书 销售

服务保障

yamibuy 满$49免运费
yamibuy 最优售后
yamibuy 美国本土发货

配送信息

  • 美国48个州

    1.标准配送 $5.99,最终价满$49免运费

    2.本地配送$5.99(加州,纽约州,新泽西,麻省和宾夕法尼亚,以上州部分地区);最终价满$49免运费

  • 阿拉斯加/夏威夷

    ALASKA/HAWAII $19.99 (10磅以下)

退换政策

提供30天内退还保障。产品需全新未使用原包装内,并附有购买凭据。产品质量问题、或错发漏发等,由商家造成的失误,将进行补发,或退款处理。其它原因需退货费用由客户自行承担。

由 京东图书 销售

服务保障

yamibuy 跨店满$69免运费
yamibuy 30天退换保障

亚米-中国集运仓

由亚米从中国精选并集合各大优秀店铺的商品至亚米中国整合中心,合并包裹后将一次合包跨国邮寄至您的地址。跨店铺包邮门槛低至$69。您将在多商家集合提供的广泛选品中选购商品,轻松享受跨店铺包邮后的低邮费。

退换政策

提供30天内退换保障。产品需在全新未使用的原包装内,并附有购买凭据。产品质量问题、错发、或漏发等由商家造成的失误,将进行退款处理。其它原因造成的退换货邮费客户将需要自行承担。由于所有商品均长途跋涉,偶有简易外包压磨等但不涉及内部质量问题者,不予退换。

配送信息

亚米中国集运 Consolidated Shipping 运费$9.99(订单满$69 包邮)

下单后2个工作日中国商家发货,所有包裹抵达亚米中国整合中心(除特别情况及中国境内个别法定节假日外)会合并包裹后通过UPS发往美国。UPS从中国发货后到美国境内的平均时间为10个工作日左右,根据直发单号可随时跟踪查询。受疫情影响,目前物流可能延迟5天左右。包裹需要客人签收。如未签收,客人须承担包裹丢失风险。

由 京东图书 销售

服务保障

满$69免运费
正品保证

配送信息

Yami Consolidated Shipping 运费$9.99(订单满$69包邮)


下单后1-2个工作日内发货。 物流时效预计7-15个工作日。 如遇清关,交货时间将延长3-7天。 最终收货日期以邮政公司信息为准。

积分规则

不参加任何折扣活动以及亚米会员积分制度。

退换政策

提供30天内退还保障。产品需全新未使用原包装内,并附有购买凭据。产品质量问题、或错发漏发等,由商家造成的失误,将进行补发,或退款处理。其它原因需退货费用由客户自行承担。

转盘抽奖

转盘抽奖

Yamibuy

下载亚米应用

返回顶部

为你推荐

品牌故事

京东图书

为您推荐

Yamibuy
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yamibuy
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yamibuy
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yamibuy
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yamibuy
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yamibuy
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折

评论{{'('+ commentList.posts_count + ')'}}

分享你的感受,帮助更多用户做出选择。

写评论
{{ totalRating }} 写评论
  • {{i}}星 {{i}}星 {{ parseInt(commentRatingList[i]) }}%
查看全部
全部 已购买 照片
Yamibuy Yamibuy
{{ comment.user_name }}

{{ showTranslate(comment) }}收起

{{ strLimit(comment,800) }}查看全部

Show Original

{{ comment.content }}

Yamibuy
查看更多

{{ formatTime(comment.in_dtm) }} 已购买 {{groupData}}

{{ comment.likes_count }} {{ comment.likes_count }} {{ comment.reply_count }} {{comment.in_user==uid ? __('Delete') : __('Report')}}
Yamibuy Yamibuy
{{ comment.user_name }}

{{ showTranslate(comment) }}收起

{{ strLimit(comment,800) }}查看全部

Show Original

{{ comment.content }}

Yamibuy
查看更多

{{ formatTime(comment.in_dtm) }} 已购买 {{groupData}}

{{ comment.likes_count }} {{ comment.likes_count }} {{ comment.reply_count }} {{comment.in_user==uid ? __('Delete') : __('Report')}}

暂无符合条件的评论

评论详情

Yamibuy Yamibuy

{{ showTranslate(commentDetails) }}收起

{{ strLimit(commentDetails,800) }}查看全部

Show Original

{{ commentDetails.content }}

Yamibuy
查看更多

{{ formatTime(commentDetails.in_dtm) }} 已购买 {{groupData}}

{{ commentDetails.likes_count }} {{ commentDetails.likes_count }} {{ commentDetails.reply_count }} {{commentDetails.in_user==uid ? __('Delete') : __('Report')}}

请输入内容

回复{{'(' + replyList.length + ')'}}

Yamibuy Yamibuy

{{ showTranslate(reply) }}收起

{{ strLimit(reply,800) }}查看全部

Show Original

{{ reply.reply_content }}

{{ formatTime(reply.reply_in_dtm) }}

{{ reply.reply_likes_count }} {{ reply.reply_likes_count }} {{ reply.reply_reply_count }} {{reply.reply_in_user==uid ? __('Delete') : __('Report')}}

请输入内容

取消

End

发表评论
商品评分

请输入评论

  • 一个好的昵称,会让你的评论更受欢迎!
  • 修改了这里的昵称,个人资料中的昵称也将被修改。
感谢你的评论
你的好评可以帮助我们的社区发现更好的亚洲商品。

举报

取消

确认删除该评论吗?

取消

京东图书

查看全部
京东图书

人间失格

1
$18.07
京东图书 销售
京东图书

人与自然·水乡篇

$32.35
京东图书 销售
京东图书

小婴孩:早识300字

2
$15.59
京东图书 销售
京东图书

一切都是最好的安排

$19.68
京东图书 销售
京东图书

人性的弱点

$19.19
京东图书 销售
京东图书

山海经

$39.89
京东图书 销售
京东图书

沙丘

$38.06
京东图书 销售
京东图书

IDA Pro权威指南(第2版)

$39.59
京东图书 销售
京东图书

世界十大文学名著:罪与罚

$19.95
京东图书 销售
京东图书

克苏鲁神话合集

$47.86
京东图书 销售

历史浏览

品牌故事

京东图书

{{email ? __('Got it!') : __('Restock Alert')}}

我们将在商品到货后第一时间通知你。

取消