netty
文章平均质量分 72
god_love_hlq_xff
这个作者很懒,什么都没留下…
展开
-
Netty源码分析
先说结论,Netty 服务端启动和交互的逻辑的底层实现是借助于Java NIO ServerSocketChannel来实现,Java NIO ServerSocketChannel作为服务端的绑定端口、接受客户端的连接的样式代码如下: /* * 既然是服务器端,肯定需要一个ServerSocketChannel来监听新进来的TCP连接。 *...转载 2018-09-15 20:40:11 · 240 阅读 · 0 评论 -
Java NIO 的前生今世 之四 NIO Selector 详解
https://segmentfault.com/a/1190000006824196 Selector Selector 允许一个单一的线程来操作多个 Channel. 如果我们的应用程序中使用了多个 Channel, 那么使用 Selector 很方便的实现这样的目的, 但是因为在一个线程中使用了多个 Channel, 因此也会造成了每个 Channel 传输效率的降低. 使用 Selec...转载 2018-10-10 23:00:46 · 111 阅读 · 0 评论 -
Netty(二) 从线程模型的角度看 Netty 为什么是高性能的?
前言 在之前的 SpringBoot 整合长连接心跳机制 一文中认识了 Netty。 但其实只是能用,为什么要用 Netty?它有哪些优势?这些其实都不清楚。 本文就来从历史源头说道说道。 传统 IO 在 Netty 以及 NIO 出现之前,我们写 IO 应用其实用的都是用 java.io.* 下所提供的包。 比如下面的伪代码: ServeSocket serverSocket =...转载 2018-09-27 22:30:46 · 164 阅读 · 0 评论 -
Netty中的异步调用
Netty中的异步调用 如果大家观察仔细,会发现我们之前所写的代码都是串行执行的,这是什么意思?就是我们看到代码是什么顺序,最后程序就是按什么顺序执行的。 但是Netty作为一个高性能网络框架,他的调用很多都是异步的,这样,就可以不等上一步做完,继续行进下一步,达到多任务并行的作用。 实现概述 Netty是怎么实现他的异步调用呢,大致总结了下由以下几个核心部分 组成: 异步执行(exec...转载 2018-09-27 22:20:32 · 3196 阅读 · 0 评论 -
Netty 源码分析之 二 事件流在ChannlePipeline中的流转
channelPipeline是一个接口,其实现类为DefaultChannelPipeline;通常像pipeline中添加channelHandler时最终都会调用以下方法: @Override public ChannelPipeline addLast(String name, ChannelHandler handler) { return addLast(null, nam...原创 2018-09-21 22:06:21 · 406 阅读 · 0 评论 -
Netty 源码分析之 ChannelPipeline (二)
我们注意到, pipeline.addXXX 都有一个重载的方法, 例如 addLast, 它有一个重载的版本是: ChannelPipeline addLast(String name, ChannelHandler handler); 第一个参数指定了所添加的 handler 的名字(更准确地说是 ChannelHandlerContext 的名字, 不过我们通常是以 handler 作...转载 2018-09-20 22:13:30 · 210 阅读 · 0 评论 -
netty开发入门代码
NettyServer 端 服务端 public class NettyServer { public static void main(String[] args) throws Exception{ NettyServer.start(); } public static void start() throws Exception{ final NettyServerHand...原创 2018-09-14 23:31:11 · 283 阅读 · 0 评论 -
Netty 源码分析之ChannelPipeline 以4.0.15 final版
一:Channel 与 ChannelPipeline 每个Channel在初始化时都会在其父类构造器中顺带构建一个ChannelPipeline,unSafe对象;即每个channel都有一个与之关联的channelPipeline;而channelPipeline是channelHandler承载的事件流容器,底层是以DefaultChannelHandlerContext为...原创 2018-09-19 23:55:24 · 203 阅读 · 0 评论 -
Netty 源码分析之 三 EventLoop(二)
https://segmentfault.com/a/1190000015484187 https://segmentfault.com/u/huamingfengqingyang/articles Netty 的 IO 处理循环 在 Netty 中, 一个 EventLoop 需要负责两个工作, 第一个是作为 IO 线程, 负责相应的 IO 操作; 第二个是作为任务线程, 执行 ta...转载 2018-09-24 21:38:46 · 171 阅读 · 0 评论 -
Netty 源码分析之 三 EventLoop (一)
Netty 的 IO 处理循环 在 Netty 中, 一个 EventLoop 需要负责两个工作, 第一个是作为 IO 线程, 负责相应的 IO 操作; 第二个是作为任务线程, 执行 taskQueue 中的任务. 接下来我们先从 IO 操纵方面入手, 看一下 TCP 数据是如何从 Java NIO Socket 传递到我们的 handler 中的. Netty 是 Reactor 模型的一个...转载 2018-09-24 21:34:20 · 162 阅读 · 0 评论 -
Netty 源码分析之服务端
服务器端 在分析客户端的代码时, 我们已经对 Bootstrap 启动 Netty 有了一个大致的认识, 那么接下来分析服务器端时, 就会相对简单一些了. 首先还是来看一下服务器端的启动代码: public final class EchoServer { static final boolean SSL = System.getProperty("ssl") != null; ...转载 2018-09-18 23:49:01 · 155 阅读 · 0 评论 -
Netty 源码分析之 一 客户端代码分析
没有创新,或者拾人牙慧,知识本来就是这样搬运着传播的。 客户端核心代码如下: public static void start(){ ClientChannelHandler channelHandler = new ClientChannelHandler(); EventLoopGroup bossGroup = new NioEventLoopGroup...原创 2018-09-18 22:53:47 · 766 阅读 · 0 评论 -
NIO的epoll空轮询bug
JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%。官方声称在JDK1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有被根本解决。该BUG以及与该BUG相关的问题单可以参见以下链接内容。 https://bugs.java.com/bugdatabase/...转载 2018-11-05 23:05:49 · 977 阅读 · 1 评论