
netty
文章平均质量分 89
netty
二狗家有矿
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
超神之路-网络协议
一、网络基础1、请简单说一下你了解的端口及对应的服务?21:FTP 22:SSH 23:Telnet 53:DNS域名服务器 80:HTTP 443:HTTPS2、IP地址分为哪几类,请简单说下各个分类?3、请简单说下ARP协议的工作过程每个主机都会有自己的ARP缓存区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系 当源主机要发送数据时,首先检测ARP列表中是否对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的...转载 2021-03-16 00:33:36 · 165 阅读 · 0 评论 -
Netty源码(十二)之服务端向客户端写数据的过程
前面的几篇博客大致的介绍整个Netty核心的代码,以及启动的流程,服务端的读取流程,以及常用的解码器的源码。至此Netty的源码还剩一个服务端向客户端写数据的流程。今天我们就来介绍一下服务端向客户端写的流程。写的方式有以下两种,具体代码如下:ctx.writeAndFlush("");ctx.channel().writeAndFlush("");1 2这两种方式的区别具体如下图所示:可以看到我们如果执行ctx.writeAndFlush("");方法后,当前的handler后面所转载 2021-02-21 21:53:03 · 340 阅读 · 0 评论 -
Netty源码(十一)之LengthFieldBasedFrameDecoder/LengthFieldPrepender
1.前文前两篇博客我介绍了三种解码器,分别是基于固定长度的解码器(FixedLengthFrameDecoder),基于行的解码器(LineBasedFrameDecoder),基于分割符解码器(DelimiterBasedFrameDecoder)今天我们这篇博客介绍最后一种解码器,就是基于长度的解码器(LengthFieldBasedFrameDecoder)2.协议的简介由于大多数的协议,协议头中会携带长度的字段,用于标示消息体或整包的长度,例如SMPP、HTTP协议等。由于基于长度解码需转载 2021-02-21 21:50:19 · 997 阅读 · 1 评论 -
Netty源码(十)之LineBasedFrameDecoder和DelimiterBasedFrameDecoder
上篇博客我们说了其中一个解码器,就是基于固定长度的解码器FixedLengthFrameDecoder,这种解码器,不具有通用性,很多时候,都是用不到的,我们来介绍一下新的解码器,就是基于行(\n,\r)的解码器LineBasedFrameDecoder。由于上篇博客我们已经介绍了一个最简单的解码器,这篇博客不会在介绍前置的流程了,具体的前置的流程可以看上篇博客。我们打开对应的LineBasedFrameDecoder的源码,发现和FixedLengthFrameDecoder继承的是同一个父类ByteTo转载 2021-02-21 21:47:33 · 486 阅读 · 0 评论 -
Netty源码(九)之服务端读取数据的过程
前面八篇博客,我们已经介绍了服务端的主Reactor线程的启动流程,以及服务端的工作Reactor线程的启动流程,以及工作的Reactor线程注册感兴趣的事件的过程,今天这篇博客我们主要介绍一下工作线程的读取数据的流程,以及介绍几个常用的的pipeline。就让我们直接进入对应的代码,走来直接看工作线程中的循环流程。具体的代码如下:public final class NioEventLoop extends SingleThreadEventLoop { //事件循环 @Override转载 2021-02-21 21:44:22 · 470 阅读 · 0 评论 -
Netty源码(八)之新客户端接入的过程
前面几篇博客我已经介绍整个服务端的启动的过程,主要就是服务端的Reactor线程的启动流程,一些信息的初始化过程,这篇博客我主要介绍客户端的接入的过程,主要还是看服务端的Reactor的线程中干的事,主要的代码如下,我们继续重温一下,具体的代码如下:public final class NioEventLoop extends SingleThreadEventLoop { //事件循环 @Override protected void run() { for (;;) {转载 2021-02-21 21:41:26 · 171 阅读 · 0 评论 -
Netty源码(七)之pipeline的生命周期以及规避Nio的空轮训的Bug
前面的六篇博客,我们已经讲了服务端的整个启动的流程,并且基于源码的做了一些解释,这篇博客我们主要讲下pipeline的生命周期的函数的调用过程。为此我们书写了以下的代码,首先看下我们服务端的启动代码,具体的代码如下:import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.cha转载 2021-02-21 21:38:47 · 436 阅读 · 0 评论 -
Netty源码(六)之doBind0()方法的过程
上篇博客我们介绍了任务队列中调用过程,分别介绍的register0的调用过程,以及往pipeline添加ServerBootstrapAcceptor的过程。这两个任务已经介绍完了。这个时候还有一个任务就是doBind0中添加的一个方法,这就是我们今天要介绍的方法。让我们重现对应的代码吧!由于我们每篇博客中都重现了服务端的代码,这篇博客我们就不重现了,我们直接看doBind0方法,具体的代码如下:public abstract class AbstractBootstrap<B extends转载 2021-02-20 09:46:26 · 367 阅读 · 0 评论 -
Netty源码(五)之SingleThreadEventExecutor.this.run()的过程
上篇博客已经讲完了bind()方法,但是bind()方法中还有两个部分没有讲,一个是dobind0()方法,还有一个就是在执行register()的方法的时候开启了一个线程执行register0()方法,这个线程开启的方法就是我们主要讲的。下面就让我们代码重现吧。具体的代码如下所示: public abstract class AbstractChannel extends DefaultAttributeMap implements Channel { protected abstract cla转载 2021-02-20 09:43:44 · 492 阅读 · 0 评论 -
Netty源码(四)之ServerBootstrap的bind(二)的过程
在上篇博客:Netty源码(三)之ServerBootstrap的bind(一)的过程,我们讲了NioServerSocketChannel初始化和创建的过程,我们这篇博客接着上篇博客继续讲,我们继续重现上一篇博客的代码,具体的代码如下:import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import i转载 2021-02-20 09:39:42 · 226 阅读 · 0 评论 -
Netty源码(三)之ServerBootstrap的bind(一)的过程
在前两篇博客中我们分别介绍了NioEventLoopGroup的创建过程和ServerBootstarp的创建的过程前面的准备的过程都已经结束了。是时候启动我们的服务端了,打开我们熟悉的代码,具体的代码如下:import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel转载 2021-02-20 09:35:56 · 725 阅读 · 0 评论 -
Netty源码(二)之ServerBootstrap初始化的过程
上篇博客《Netty源码(一)之NioEventLoopGroup初始化的过程》我们说了NioEventLoopGoup的初始化的过程。今天我们来讲讲ServerBootstrap的初始化的过程,我们继续重现上篇博客的代码,具体的代码如下:import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import转载 2021-02-20 09:24:41 · 779 阅读 · 0 评论 -
Netty源码(一)之NioEventLoopGroup初始化的过程
今天我们来讲讲Netty的启动流程,要理解Netty的启动流程,我们要理解NIO模型到Reactor模型,因为Netty的实现就是基于Reactor模型的。一个主selector线程用来监听所有客户端的连接,然后为对应的连接上来的客户端开辟一个selector线程来监听客户端的上的事件,进行相应的处理。这就是NIO的Reactor模型。但是在Netty中怎么实现的呢?就让我们走进Netty的源码世界,一探究竟。由于Netty的启动流程过于复杂。我们这篇博客只讲Netty启动流程中一小部分NioEve转载 2021-02-20 09:21:40 · 440 阅读 · 0 评论 -
基于Netty手动模拟聊天室和RPC
前面我们用了Java的NIO,但是非常的难用,尤其是ByteBuffer,几个指针很容易出错。于是有了Netty框架,Netty框架是对Java的NIO进行了封装,使Java的NIO更容易上手。Netty框架中没有使用NIO原生的ByteBuffer,而是使用新封装的ByteBuf,下面我们看看的ByteBuf的用法。废话不多说,直接上代码。import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import java.u转载 2021-02-20 09:17:59 · 392 阅读 · 0 评论