Netty
Netty从理论到实践
GxDong_
这个作者很懒,什么都没留下…
展开
-
[Netty]bind方法源码分析
服务器在bind方法中完成初始化,核心方法为doBind方法,该方法主要完成执行initAndRegister方法执行doBind方法initAndRegister使用channelFactory.newChannel()方法反射创建一个NIOServerSocketChannel对象,同时创建了一个NioServerSocketChannelConfig对象。对NioServerSocketChannelConfig调用init方法完成初始化2.1 init方法设置NioServer原创 2021-01-11 21:12:18 · 101 阅读 · 0 评论 -
[Netty] 使用Netty实现webSocket服务端
使用Netty实现WebSocket的服务端部分服务端代码import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelPipeline;import io.netty.channel.EventLoopGroup;import io.netty.c原创 2021-01-07 15:48:06 · 309 阅读 · 0 评论 -
[Netty] Netty心跳检测
Netty进行心跳检测的方法有很多,本文主要介绍通过Netty提供的idleStateHandler完成心跳检测IdleStateHandlerIdleStateHandler是Netty提供的专门用于处理空闲状态的处理器三个参数:1. readerIdleTIme 表示多长时间没有读了,就会发送一个心跳检测包,检测是否还是连接状态2. readerIdleTime 表示多长时间没有写了,就会发送一个心跳检测包,检测是否还是连接状态3. allIdleTIme 表示多长时间没有读写了,就会原创 2021-01-06 20:35:25 · 286 阅读 · 1 评论 -
[Netty] 基于Netty的简单群聊系统
功能使用Netty实现简单的群聊系统检测各个客户端的上线和下线;将客户端的数据分别推送到其他客户端代码服务端代码import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.Cha原创 2021-01-06 15:02:06 · 171 阅读 · 1 评论 -
[Netty] Bytebuf
Unpooled类是Netty提供的一个专门用于操作Netty数据容器的工具类Bytebuf创建一个Bytebuf对象,该对象包含一个byte[] 数组,在Netty的ByteBuf中不需要使用lip进行反转,也可完成读写操作Bytebuf使用了readIndex和writeIndex保存读取和写入的索引/*** 创建一个ByteBuf */ ByteBuf buffer = Unpooled.buffer(); for (int i = 0; i < 10; i++) {原创 2021-01-04 20:35:39 · 120 阅读 · 0 评论 -
[Netty] ChannelHandlerContext详解
ChannelHandlerContext组件ChannelHandlerContext常叫ctx。ChannelHandlerContext里就包含着ChannelHandler中的上下文信息,每一个ChannelHandler被添加都ChannelPipeline中都会创建一个与其对应的ChannelHandlerContext。ChannelHandlerContext的功能就是用来管理它所关联的ChannelHandler和在同一个ChannelPipeline中ChannelHandler的原创 2020-12-30 17:32:14 · 2424 阅读 · 0 评论 -
[Netty] Netty案例——基于Netty的HTTP请求
使用Netty实现HTTP请求使用Netty编写服务端,使用浏览器模拟HTTP请求,访问服务端。服务端返回的数据在浏览器显示。服务端代码import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.原创 2020-12-28 21:49:38 · 1665 阅读 · 0 评论 -
[Netty] Netty的Task及Future机制
Netty的Task的3中典型应用场景用户程序自定义的普通任务用户自定义定时任务非当前Reactor线程调用Channel的各种方法Netty框架中NIOEventGroup中的EventLoop中的TaskQueue中处理任务1. 用户程序自定义的普通任务ctx.channel().eventLoop().execute(new Runnable(){ @Override public void run(){ // 用户定义的特定任务 }})对于队列中的多个任务,顺序执行。原创 2020-12-28 08:52:50 · 218 阅读 · 0 评论 -
[Netty] Netty入门案例TCP连接
通过简单的例子演示Netty进行TCP请求,解释Netty运行的过程使用Maven环境引入Netty依赖<dependencies> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.43.Final</version>原创 2020-12-26 12:36:11 · 312 阅读 · 0 评论 -
[Netty] Netty概述
原生NIO问题NIO的类库的API繁杂,使用麻烦。开发工作量大,需要if判断不同的情况,如网络断开等情况需要重复处理。NIO存在Epoll Bug 导致选择器空轮空Nettynetty是一个异步的基于事件驱动的网络应用框架,快速的开发高性能的service和clientsNetty支撑多种协议https://netty.io/index.html建构设计线程模型目前存在的线程模型:传统阻塞IO模型Reactor模式根据Reactor的数量和处理资源池线程的数量的不同又原创 2020-12-21 21:08:10 · 138 阅读 · 0 评论 -
[Netty] NIO和零拷贝
零拷贝指不发生CPU拷贝传统IO经历了4次拷贝、三次上下文切换4次拷贝:DMA(直接内存拷贝)拷贝到内核bufferCPU拷贝到用户Buffer—用户进行修改操作—CPU拷贝到SocketBufferDMA拷贝到协议栈mmap内存映射优化经历了3次拷贝、3次上下文切换(内核缓冲和User缓冲共享数据)三次拷贝DMA(直接内存拷贝)CPU拷贝—用户进行修改操作—DMA拷贝到协议栈sendFile优化(Linux 2.1)经历了3次拷贝、2次上下文切换(数据不经过用原创 2020-12-20 22:18:10 · 235 阅读 · 0 评论 -
[Netty] 基于NIO的简单群聊系统
介绍基于Netty的后端群聊系统,实现的功能有监听客户端的上线和下线、监听客户端的消息的发送代码服务端package com.gxd.nio.groupchat;import jdk.nashorn.internal.ir.annotations.Ignore;import org.omg.CORBA.IRObject;import java.io.IOException;import java.net.InetSocketAddress;import java.net.So原创 2020-12-20 15:15:36 · 103 阅读 · 0 评论 -
[Netty] Selector选择器
选择器介绍Selector能够同时检测对个注册的通道上是否有事件发生多个Channel以事件的方式注册到同一个Selector。如果有事件发生,就获取事件,然后对事件进行处理,只使用一个线程就管理了多个通道。只有在一个通道真正有读写事件时,才会执行。Selector、SelectionKey、ServerSocketChannel和SocketChannel的关系当客户端连接时,会通过ServerSocketChannel得到SocketChannel将SocketChannel注原创 2020-12-17 22:44:43 · 349 阅读 · 0 评论 -
[Netty] MappedByteBuffer、Buffer的分散和聚集
MappedByteBuffer的使用介绍使用MappedByteBuffer可以不在内存中将文件修改,使用堆外内存,不需要将文件进行而外的拷贝。是一个操作系统级别的文件修改代码 public static void main(String[] args) throws Exception { RandomAccessFile randomAccessFile = new RandomAccessFile("1.txt","rw"); // 获取对应通原创 2020-12-15 21:23:07 · 245 阅读 · 0 评论 -
[Java] 面试常考排序算法的Java实现
本文对常见、常用、面试中常考的排序算法,使用Java语言实现,并对个算法的时间复杂度进行了分析。排序算法,这一篇就够了原创 2020-06-24 15:01:33 · 360 阅读 · 0 评论