Netty权威指南2-读书笔记

2020-11-06  本文已影响0人  landon30

Netty权威指南2-读书笔记

UNIX网络编程5种I/O模型

Java I/O类库的发展和改进

Netty 入门

TCP 粘包/拆包问题的解决之道

分隔符和定长解码器的应用

编解码技术

MessagePack编解码

Google Protobuf 编解码


     BEFORE DECODE (302 bytes)       AFTER DECODE (300 bytes)
     +--------+---------------+      +---------------+
     | Length | Protobuf Data |----->| Protobuf Data |
     | 0xAC02 |  (300 bytes)  |      |  (300 bytes)  |
     +--------+---------------+      +---------------+

    BEFORE ENCODE (300 bytes)       AFTER ENCODE (302 bytes)
    +---------------+               +--------+---------------+
    | Protobuf Data |-------------->| Length | Protobuf Data |
    |  (300 bytes)  |               | 0xAC02 |  (300 bytes)  |
    +---------------+               +--------+---------------+

JBoss Marshalling 编解码

HTTP协议开发应用

WebSocket协议开发

私有协议栈开发


protected void readTimedOut(ChannelHandlerContext ctx) throws Exception {
        if (!closed) {
            ctx.fireExceptionCaught(ReadTimeoutException.INSTANCE);
            ctx.close();
            closed = true;
        }
    } 


lengthFieldOffset = 2
lengthFieldLength = 3
lengthAdjustment    = 0
initialBytesToStrip = 0
 
BEFORE DECODE (17 bytes)                      AFTER DECODE (17 bytes)
+--------+--------+----------------+     +----------+----------+--------------
|Header 1| Length |Actual Content |----->| Header 1 |  Length  | Actual Content |
|0xCAFE | 0x00000C| "HELLO, WORLD"|      |  0xCAFE  | 0x00000C | "HELLO, WORLD" 

服务端创建


              I/O Request
 *                                            via {@link Channel} or
 *                                        {@link ChannelHandlerContext}
 *                                                      |
 *  +---------------------------------------------------+---------------+
 *  |                           ChannelPipeline         |               |
 *  |                                                  \|/              |
 *  |    +---------------------+            +-----------+----------+    |
 *  |    | Inbound Handler  N  |            | Outbound Handler  1  |    |
 *  |    +----------+----------+            +-----------+----------+    |
 *  |              /|\                                  |               |
 *  |               |                                  \|/              |
 *  |    +----------+----------+            +-----------+----------+    |
 *  |    | Inbound Handler N-1 |            | Outbound Handler  2  |    |
 *  |    +----------+----------+            +-----------+----------+    |
 *  |              /|\                                  .               |
 *  |               .                                   .               |
 *  | ChannelHandlerContext.fireIN_EVT() ChannelHandlerContext.OUT_EVT()|
 *  |        [ method call]                       [method call]         |
 *  |               .                                   .               |
 *  |               .                                  \|/              |
 *  |    +----------+----------+            +-----------+----------+    |
 *  |    | Inbound Handler  2  |            | Outbound Handler M-1 |    |
 *  |    +----------+----------+            +-----------+----------+    |
 *  |              /|\                                  |               |
 *  |               |                                  \|/              |
 *  |    +----------+----------+            +-----------+----------+    |
 *  |    | Inbound Handler  1  |            | Outbound Handler  M  |    |
 *  |    +----------+----------+            +-----------+----------+    |
 *  |              /|\                                  |               |
 *  +---------------+-----------------------------------+---------------+
 *                  |                                  \|/
 *  +---------------+-----------------------------------+---------------+
 *  |               |                                   |               |
 *  |       [ Socket.read() ]                    [ Socket.write() ]     |
 *  |                                                                   |
 *  |  Netty Internal I/O Threads (Transport Implementation)            |
 *  +-------------------------------------------------------------------+

客户端创建

ByteBuf和相关辅助类

Channel 和 Unsafe

ChannelPipeline和ChannelHandler

EventLoop和EventLoopGroup

Future 和 Promise

Netty架构剖析

Java 多线程编程在 Netty中的应用

高性能之道

可靠性

安全性

* Netty通过Ssmandler提供了对SSL的支持,它支持的SSL协议类型包括:SSLV2、SSLV3 和 TLS
    * SSL单向认证
    * SSL双向认证
    * 第三方CA认证
* Netty扩展的安全特性
    * IP地址黑名单机制
    * 接入认证

展望

上一篇 下一篇

猜你喜欢

热点阅读