# netty-research **Repository Path**: duncan666/netty-research ## Basic Information - **Project Name**: netty-research - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-10-11 - **Last Updated**: 2021-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 来自于极客时间《Netty源码剖析与实战》 #### 1. 实现一个点单的程序 ##### 1. 案例介绍 ![img.png](img.png) OrderOperation 点单 OrderOperationResult 点单是否成功 AuthOperation 授权 AuthOperationResult KeepaliveOperation KeepaliveOperationResult ##### 2. 数据结构 ![img_1.png](img_1.png) version:版本号 opCode:对应的message body是不一样的 streamId:信息的唯一id length:TCP协议用于解决粘包和半包的问题,处理封帧问题,对应的是message信息 ##### 3. 响应分发 ![img_2.png](img_2.png) ##### 4. netty注意事项 ![img_3.png](img_3.png) 1. initialBytesToStrip 不设置不导致整个都解析,构造器有很多 2. 读保证自上而下,写保证自下而上,V字型要领,左边放请求,右边放响应,中间放业务逻辑 3. 别人写的和自己要写的,如果是别人写的,你看它可标记成@sharable了。如果自己写的,自己最清楚了,主要看可有线程安全和是否符合自己的需求,比如你统计整个系统的,一般都要做成共享的,如果你统计单一连接的,你肯定就是非共享的,不管用哪种方式去看,自己去实际分析代码最准确。其中就有你说的那个小方法,就是看那个类可有成员变量,如果一个没有,十有八九都可以共享。 4. channelHandlerContext.alloc().buffer是启动时指定的,ByteBufAllocator.DEFAULT.buffer()会导致实现不一致 5. byteBuf释放,SimpleChannelInboundHandler会自动帮我们释放 6. write()仅仅是将信息发送到队列,并不是发送,寻找下一个符合要求的handle 7. channelFuture.channel().writeAndFlush(requestMessage),走了一遍pipeLine,乱用会导致死循环,常常用于客户端的编写