netty
wait_for_eva
longer
展开
-
netty-http和handler生命周期
http之前我们好像用netty去完成了http接口的实现,不过其实存在很多坑。很多http的特性并没有真正的识别和处理。请求路径首先不论如何路径,只要是localhost:8989,后面不论跟上什么的确能够触发逻辑。必须这样改protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws ...原创 2019-01-18 00:30:45 · 582 阅读 · 0 评论 -
netty-grpc基础准备
基本配置完整标准依据官网进行配置。依赖 compile( 'org.slf4j:slf4j-nop:1.7.25', 'io.grpc:grpc-netty-shaded:1.18.0', 'io.grpc:grpc-protobuf:1.18.0', 'io.grpc:grpc-stub:1...原创 2019-01-30 13:42:17 · 1810 阅读 · 0 评论 -
netty-grpc简单调用
Handlerpublic class StudentServiceHandler extends StudentServiceGrpc.StudentServiceImplBase{ @Override public void searchStudent(Message.Request request, StreamObserver<Message.Student>...原创 2019-01-30 13:45:30 · 1149 阅读 · 0 评论 -
netty-Bootstrap
构造 public ServerBootstrap() { } private ServerBootstrap(ServerBootstrap bootstrap) { super(bootstrap); childGroup = bootstrap.childGroup; childHandler = bootstrap.chil...原创 2019-02-16 14:10:39 · 226 阅读 · 0 评论 -
netty-NioEventLoopGroup
构造层级无参构造public NioEventLoopGroup() { this(0);}单参数指定线程数 public NioEventLoopGroup(int nThreads) { this(nThreads, (Executor) null); }双参数额外指定执行器executor public NioEven...原创 2019-02-10 14:52:18 · 232 阅读 · 0 评论 -
netty-grpc四种方法
single-singleprotobufrpc searchStudent(Request) returns(Student){}handler public void searchStudent(Message.Request request, StreamObserver&lt;Message.Student&gt; responseObserver) { Stri...原创 2019-01-30 18:44:06 · 4370 阅读 · 0 评论 -
netty-Reactor
ReactorReactor是一种设计模式,至于到底是什么东西,请参看权威文档。这篇博文解释的也比我好多了。我就是记录一下自己的想法而已。CS业务处理BIO的诟病阻塞初始模式正如博文中所述,BIO服务器端如此的接收和处理请求while(true){ socket = accept(); handle(socket) }这就构成了如此的闭环dealf...原创 2019-02-28 14:36:53 · 666 阅读 · 0 评论 -
netty-接收缓冲区大小适配及类型选择
Channel创建再次回顾一下Channel的流程吧。doBindpublic ChannelFuture bind(int inetPort) { return bind(new InetSocketAddress(inetPort));}bind2public ChannelFuture bind(SocketAddress localAddress) { val...原创 2019-03-14 21:09:15 · 9313 阅读 · 0 评论 -
netty-一行代码引起的思考
0. 开始的地方Handler(Selector sel, SocketChannel c) throws IOException { ... sk.attach(this); ...}new Handler(selector, c);Scalable IO in Java中看到这代码,总让我感觉有点骚东西。前面的记录总简单的抒发了一下,现在让我天马行空的思维...原创 2019-03-16 02:05:02 · 157 阅读 · 0 评论 -
netty-option和attr设置
位置回顾一下原来追到的位置doBindbind触发操作之后,追到了doBind private ChannelFuture doBind(final SocketAddress localAddress) { final ChannelFuture regFuture = initAndRegister(); ... }initAndReg...原创 2019-03-16 20:14:53 · 2461 阅读 · 3 评论 -
netty-注册和事件传播
入口 final ChannelFuture initAndRegister() { ... ChannelFuture regFuture = config().group().register(channel); return regFuture; }继续追踪register public ChannelFuture regist...原创 2019-03-20 21:53:38 · 1186 阅读 · 0 评论 -
netty-pipelin与handler及context关系梳理
HandlerChannelHandlerpublic interface ChannelHandler { void handlerAdded(ChannelHandlerContext ctx) throws Exception; void handlerRemoved(ChannelHandlerContext ctx) throws Exception; @De...原创 2019-03-17 18:15:57 · 613 阅读 · 0 评论 -
netty-Reactor2
五大角色actordescriptionInitiation Dispatcher初始化分发器Hadler资源句柄Synchronous Event Demultiplexer同步事件分离器Event Handler处理器Concrete Event Handler处理器实例角色详解Event Handler这个好入手,先从这个下...原创 2019-03-13 00:03:42 · 172 阅读 · 0 评论 -
netty-设计模式小结
观察者模式开发中中会遇到如此的事情:每个模块都只完成自己的功能,但是只有全部整合才是我们的目标。这是最常见不过的例子,每个部分都必须按照逻辑顺序进行执行,也可能是分支选择的执行。写一起太长,所以有了封装的代码块,类或者方法。但是在整合过程中,有不免各种的if...else,switch...case…也就是说,我们需要知道每个部分执行到了什么哪个部分,到了没有,执行完没有,我们总想知道...原创 2019-03-22 00:55:23 · 227 阅读 · 0 评论 -
netty-注册执行器选择
线程再定义线程原意百度百科 : 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务偏颇和漏洞实话说来,上面的定义没有问题,但是本质不够明确,它说了这几点单一顺序控制流并发执行任务但是结合自身的体会,我发现线程这个概念在我的思想里总是不固定,越是探究,越是多变。如今,发现了根本问题,我们理解的线程的概念,不过是:并发执行任务的方式。...原创 2019-03-18 22:22:25 · 263 阅读 · 0 评论 -
netty-粘包和编解码
粘包和拆包clientpublic class SimpleClientHandler extends ChannelInboundHandlerAdapter { @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { for(int times = 1...原创 2019-03-25 22:35:12 · 207 阅读 · 0 评论 -
netty-writeAndFlush的输出顺序
结果输出netty写出结果,总需要让channel进行write,然后配合flush刷出。如果一次性写好的话,writeAndFlush就可以一步完成。但是这里有两个方法ctx.writeAndFlushctx.channel().writeAndFlush底层自然都是通过channel进行的writeAndFlush。但是中间部分的context和作为全局的channel,经由...原创 2019-03-23 12:28:08 · 3332 阅读 · 1 评论 -
netty-零拷贝
回顾之前总结的DirectBuffer如此 device OS JVMcopyI/OaddressI/OdiskheapMemoryCopydirectMemoryheapObjectdirectObjectheapMemory这个让我们感觉的,就是Direct会比Heap更快速。但是追根究底,这只是表面差异,为了更高的性能,我们可以说应该完全舍弃Heap。把Diret和Heap的区别扩...原创 2019-02-10 14:55:36 · 380 阅读 · 0 评论 -
netty-NIO_chatServie
codecpublic class MessageCodec { private static Charset charset; static{ charset = Charset.forName("utf-8"); } public static ByteBuffer encode(String string) { return ...原创 2019-02-05 20:09:38 · 222 阅读 · 0 评论 -
netty-客户端和服务端结构对比
之前的是服务端,客户端又是如何的呢?大体流程仍然是 Main &gt;&gt;Initializer &gt;&gt;Handler。不过具体流程上面还是有一定差异,接下来对比一下。MainClientpublic class ClientMain { public static void main(String[] args) throws Exception{ ...原创 2019-01-18 23:19:10 · 1221 阅读 · 0 评论 -
netty-webSocket
服务端WebSocketServerMain一样的尿性,省略WebSocketServerInitializerpublic class WebSocketServerInitializer extends ChannelInitializer&lt;SocketChannel&gt; { @Override protected void initChannel(Soc...原创 2019-01-24 11:11:45 · 168 阅读 · 0 评论 -
netty-时间服务器
编解码器public class ClientInitializer extends ChannelInitializer<SocketChannel> { @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline...原创 2019-01-19 21:34:48 · 200 阅读 · 0 评论 -
netty-聊天服务器
服务端ServerMainpublic class ChatServerMain { public static void main(String[] args) throws InterruptedException { NioEventLoopGroup bossGroup = new NioEventLoopGroup(); NioEventLoo...原创 2019-01-20 00:17:24 · 1140 阅读 · 0 评论 -
netty-protobuf基本
文档格式syntax = "proto2";package godme;option java_package = "com.godme.protobuf";option java_outer_classname = "Message";message Person{ required string name = 1; required int32 id = 2;..原创 2019-01-24 21:54:55 · 446 阅读 · 0 评论 -
netty-心跳检测
服务端服务端还是默认的时间服务器,值得一提的是Handler中有了一些改动。TimerServerHandlerpublic class TimeServerHandler extends SimpleChannelInboundHandler<String> { @Override protected void channelRead0(ChannelHan...原创 2019-01-20 20:54:28 · 232 阅读 · 0 评论 -
netty-protobuf-demo
ProtoBufsyntax = "proto2";package com.godme.protobuf;option java_package = "com.godme.protobuf";option java_outer_classname = "Message";option optimize_for = SPEED;message Cat{ optional st...原创 2019-01-25 14:43:33 · 358 阅读 · 0 评论 -
netty-thrift-IDL
安装参照官网进行安装。windows下载安装包windows安装比较奇葩,首先下载对应额安装包,选定版本以后,下载.exe。安装你会发现,死活点击都只是一闪而过。因为这个不是安装包,而是运行程序。thrift在windows上使用此命令程序即可,无需进行安装。为了使用方便,可以把版本号去掉:thrift-0.12.0.exe >> thrift.exe。...原创 2019-01-26 15:41:53 · 242 阅读 · 0 评论 -
netty-grpc_gradle代码生成位置
代码生成位置默认位置默认代码的生成位置在$buildDir/generated/source/proto。Message在目录下的/main/java。Service在目录下的/main/grpc。位置组成生成代码位置默认在$generatedFilesBaseDir/$sourceSet/$builtinPluginName下面。先分割一下前面的默认位置:$generated...原创 2019-01-31 13:06:24 · 587 阅读 · 0 评论 -
netty-gradle基本环境
安装gradle访问官网,按照指示进行下载配置即可,具体页面在此。觉得慢的可以使用下载我分享的百度云,提取码sg6s。解压到指定目录即可,无需安装。环境变量配置先配置GRADLE_HOME为你的解压路径,我的是d:\software\gradle。然后把可运行文件配置到PATH上,在后面添加%GRADLE_HOME%\bin;即可。环境变量不熟悉的可以通过计算机 >>...原创 2019-01-16 15:38:40 · 4934 阅读 · 0 评论 -
netty-小例子
简单逻辑梳理Created with Raphaël 2.2.0开始启动入口初始化加载handler处理方法结束总体来说,代码中的启动流程是由大到小的顺序进行的。我们首先从最外层直接启动服务,但是最细节的处理我们写在handler中,然后交给initializer进行初始化MyServerpublic class MyServer { public static void mai...原创 2019-01-16 16:54:39 · 201 阅读 · 0 评论 -
netty-thrift-demo
处理器public class PersonHandler implements PersonService.Iface { HashMap<String, Person> people = new HashMap<>(); @Override public Person getPersonByName(String name) throws My...原创 2019-01-27 23:15:08 · 500 阅读 · 0 评论 -
netty-Decorator装饰模式
装饰和继承两者最大的区别,在于对功能的影响:继承:对功能的扩充,量装饰:对功能的扩充,质或者从载体的角度上进行考量:继承:针对类,扩展新的行为,增加新的功能装饰:针对对象,扩展单一行为,增添功能特性如果从根源进行讲述:继承:增加新方法,扩充方法集合装饰:修饰老方法,扩充方法功能换言之,继承注重方法的量,装饰注重方法的质。不过容易引起歧义的,是继承当中的重载和调用的管理。重载...原创 2019-02-03 22:31:48 · 140 阅读 · 0 评论 -
netty-Buffer基本
抛开其他,先来了解一下Buffer。七种BuffertypebufferbyteByteBuffercharCharBuffershortShortBuffreintIntBuffrefloatFloatBufferdoubleDoubleBufferlongLongBufferboolean-对于八种基本...原创 2019-02-04 11:44:38 · 1184 阅读 · 0 评论 -
netty-DirectByteBuffer
Buffer的种类就类型而言,Buffer总共有七种基本的对象,但是从底层来看,最大的区别只在于Heap和Direct的区别。Heap:JVM堆内存Direct:OS直接内存I/O的关系和硬件设备打交道,必定是操作系统os的工作。而JVM只是OS之上的再组织,根源操作仍然是OS进行的操作。 device OS JVMdisklinuxjavaProgram两种Buffer的对...原创 2019-02-04 16:11:03 · 643 阅读 · 0 评论 -
netty-channel
读取public class ChannelMain { public static void main(String[] args) throws IOException { RandomAccessFile file = new RandomAccessFile("test.txt","rw"); FileChannel channel = file....原创 2019-02-04 18:51:10 · 350 阅读 · 0 评论 -
netty-selector
管理逻辑所有的channel通过regiest交给selector进行管理。但是所有的selector并不是直接对channel进行管理,而是通过创建selectionKey对channel进行管理。也就是这样regiestmanagemanageselectorchannelselectionKey同时,注册时还需要声明类型,也就是说生成的selectionKey中还有类型的划分,也就...原创 2019-02-05 17:11:44 · 1367 阅读 · 1 评论 -
netty-ByteBuf计数回收
对比索引 * <pre> * +-------------------+------------------+------------------+ * | discardable bytes | readable bytes | writable bytes | * | | (CONTENT)...原创 2019-03-24 17:11:45 · 559 阅读 · 0 评论