![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网编
文章平均质量分 87
网络编程
w-小菜
I thank you from the bottom of my heart.
展开
-
Netty---编解码(原理)
1.ByteToMessageDecoder 用于将ByteBuf解码成为POJO对象重要字段:ByteBuf cumulation; //缓存private Cumulator cumulator = MERGE_CUMULATOR; //累计器private boolean singleDecode; private boolean first; //是否第一次解码private boolean firedChannelRead;//状态码private byt..原创 2020-07-06 19:26:07 · 643 阅读 · 0 评论 -
Netty---编解码(使用)
说明:《Netty,zookeeper,redis》学习笔记 Netty底层需要从ByteBuf读取二进制数据,传入流水线处理器中,处理器将二进制信息解码成为pojo对象。这个解码的操作需要Netty的Decoder解码去完成。出战的时候,又需要把Pojo对象,转成ByteBuf中的二进制数据,然后通过通道发送给对方。一,Decoder 原理与实践 Netty的内置解...原创 2020-04-20 18:20:09 · 399 阅读 · 0 评论 -
Netty---ByteBuf实现
一,获取1.ByteBuf实现分类按底层实现分类 1.HeadByteBuf: 底层实现为java堆内的字节数组,byte[],可以有GC回收。特点是内涵的分配和回收速度块,缺点是如果进行socket的io读写,需要额外做一次内存复制,将堆内存的内容复制到内核内存中,性能会有一定程度的下降。 2.DirectByteBuf:直接内存字节缓冲区,非堆内存,它在堆外进行内存分配,相比于堆内存,它的分配和回收都相对较慢,但是读写操作,少了一次内存复制,速度比堆内存块。内核空间的字节数...原创 2020-07-06 10:43:26 · 588 阅读 · 0 评论 -
Netty---ByteBuf认识
一,概念Netty提供了ByteBuf代替java NIO的ByteBuffer。 1.ByteBuf的优势:池化,减少了内存复制,GC,提升了效率,复合缓冲区类型,不需要调用flip()进行状态切换,读取和写入所以分开,方法的链式调用,可以进行引用计数,方便重复使用。 2.ByteBuf逻辑部分:内部是一个字节数组,从逻辑上看,可以分为四个部分,第一个:废弃,以用字节,第二个:可读,有效数据。第三个:可写。第四个:可扩容, 3.ByteBuf的重要属性:分为...原创 2020-07-05 22:13:55 · 318 阅读 · 0 评论 -
Netty---ChannelHandler
一,概念 能够被selector监控的IO事件有四种,分别是SelectionKey里面的 可读,可写 ,连接, 接收。四种。 在NioEventLoop里面有selector对事件进行监听,然后dispatch(派发)给handler。Netty中handler分为两类,一种是通道入站处理器Inbound; 另外一种是通道出战处理器Outbound; 两者都继承了ChannelHandler。 举例:比如EventLoop查询到了OP_R...原创 2020-07-05 19:03:26 · 703 阅读 · 0 评论 -
Netty---ChannelPipline
一,概念梳理一下Netty反应器模式中各个组件之间的关系: 1.反应器EventLoop和通道Channel:一对多,一个EventLoop可以绑定多个Channel 2.通道Channel和处理器handler:多对多(一个channel的IO事件被多个handler处理,一个handler可以处理多个channel的相同IO事件)那么如何把处理器绑定到通道中呢? 特殊组件:ChannelPipline(通道流水线):将多个处理器实例绑定到同一个通道,串起来管理,是...原创 2020-07-04 16:55:22 · 307 阅读 · 0 评论 -
Netty---AbstractChannel
一,概述 Netty不直接使用java NIO的channel组件,而是封装了,支持多种通信协议,比如tcp,udp,sctp。而且它还把channel分为了nio非阻塞的,和olo(bio)阻塞的两种。 netty为什么不使用nio的channel呢? 1.由于jdk的socketChannel和ServerSocketChannel主要职责是网络I/O操作,他们是SPI类接口,具体的实现由厂家自己来,难度很大,直接实现这两个的抽象类难度与实现spi接口工作量差...原创 2020-07-03 15:15:14 · 654 阅读 · 0 评论 -
Netty---BootStrap
Bootstrap类是Netty提供的一个工厂类,作用:Netty组件的组装,Netty程序的初始化。一,概念 1.父子通道 在Netty中,每一个NioSocketChannel通道所封装的是Java Nio通道,java Nio下面就是操作系统封装的socket描述符。操作系统的底层socket描述符又分为: 1.连接监听类型:放在服务器端,负责接收客户端的套接字连接请求,一个监听类型的socket描述符可以监听成千上万个连接请求。 2...原创 2020-07-02 23:11:47 · 1342 阅读 · 0 评论 -
Netty---EventLoop详解
《Netty,redis,zookeeper高并发实战》读书笔记一,Netty实践demopublic class NettyDiscardServer {privateint serverPort=8080;ServerBootstrap b=new ServerBootstrap();public NettyDiscardServer(int p...原创 2020-04-19 20:26:15 · 877 阅读 · 0 评论 -
Netty---实现http服务
说明:《Netty权威指南》读书笔记http协议是什么?超文本传输协议,传输Html,text等的。它是建立在tcp传输协之上的。一,Http协议介绍 http协议的主要特点: 1.简单:客户端发送请求的时候,只需要指定服务的url,携带必要的参数或者消息体。 2.灵活:传输的内容类型由Http消息头中的content-Type加以标记。 3.无状态:每次连接,只能发送一次请求,然后断开。 Http中的URL:http://h...原创 2020-06-25 08:43:42 · 704 阅读 · 0 评论 -
Netty---入门demo
信息的发送与返回(这里有问题,但是没有发现问题在哪里,暂时存一下代码,后期深入研究的时候,再来补)public class TimeClient { public void connect(int port,String host) throws InterruptedException { //配置客户端的nio线程组 EventLoopGroup group=new NioEv...原创 2020-03-26 19:12:14 · 261 阅读 · 0 评论 -
基础---异步回调
什么是异步回调? 随着业务模块的拆分,各个系统的业务架构变得越来越复杂,一个业务会调用很多的外部接口,为了提高效率,这种调用是异步的调用,但是最后我们需要使用返回的结果进行处理,这里就需要同步的处理结果,如何实现呢?就产生了异步回调问题。一,join异步阻塞 使用线程阻塞,join()方法完成线程通信。使用喝茶为例子,两个事情,一个是烧水,一个是洗杯子,我们先把水烧上...原创 2020-04-18 19:53:54 · 1747 阅读 · 0 评论 -
基础---Reactor反应器模式
来由:最传统的模式中,一个线程,阻塞的完成独写任务,效率低下,于是就产生了经典的 "Connection per THread"模式,当一个任务触发的时候就派发给一个线程去处理,也就是一个线程对应一个socket,而且一个线程只能处理一个socket,因为独写是阻塞的,如果一个线程处理多个socket也是要排队的。那么就出现了大量的线程,线程的上下文切换是很消耗资源的。于是“Reactor"反应器...原创 2020-04-18 14:41:24 · 414 阅读 · 0 评论 -
基础---NIO三大组件
NIO的实现,基于通道(Channel),选择器(Selector),缓冲区(Buffer)实现的,这里分别讲解各种的实现。一,Nio Buffer类 是什么?作为缓冲区,他的本质是一块内存块,既可以写入数据,也可以读出数据,NIO的Buffer类是一个抽象类,位于java.nio中,内部是一个数组。他与普通数组不同的是,他提供了更加有效的方法来进行写入/读取的交替访问。(因为...原创 2020-04-17 20:17:20 · 371 阅读 · 0 评论 -
基础---四种IO模型
一,内核缓冲区与进程缓冲区 我们的read/write操作,不是直接从用户进程到达设备/磁盘 的。而是有一个中间商:内核缓冲区。为什么要设置内核缓冲区? 答:我们的cpu是时间片运行的,如果该线程占用cpu时间到了,那么就需要切换线程,这个时候线程的上下文切换代价极高,所以有了中间商来处理。 我们主要把我们的包裹给中间商(内存缓冲区),然后我们就解决完成了,包裹的...原创 2020-04-17 14:36:49 · 710 阅读 · 0 评论 -
基础---tcp/udp
java网络编程网络通信三要素:IP,端口号,传输协议;第一个 IP获取 InerAddressSocket 连接类;Packet打包类;两种方式,第一种UDP协议传输:发送:package tu;import java.io.IOException;import java.net.*;public...原创 2018-07-07 21:59:04 · 345 阅读 · 0 评论 -
多人在线聊天系统:BIO与NIO实现
服务端代码:public class ChatServer { private int port=8888; private final String quit="quit"; private ServerSocket serverSocket; private Map<Integer,Writer> connectedClients; //客户端的端口,和写入流。 ...原创 2020-03-20 22:38:09 · 237 阅读 · 0 评论