自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 Netty模型

相比于NIONIO学习成本高,代码复杂NIO存在BugNetty架构设计、线程模型传统的阻塞IO一个请求一个线程。缺点并发数高时,就会创建大量的线程,占用系统资源当没有数据可读时,线程会阻塞read操作,浪费资源Reactor模式单Reactor单线程 Handler中处理了业务逻辑。Reactor通过select监听客户端请求事件,通过Disp...

2019-11-22 23:36:25 415 1

原创 TCP粘包和拆包

粘包拆包的概念以及解决方案

2019-11-26 16:29:44 8232

原创 编码器与解码器

Netty中的编码器、解码器

2019-11-25 23:20:39 2333

原创 ProtoBuf

编码和解码数据在网络中的传输都是以二进制字节码数据,在发送时需要编码,接收时需要解码。codec由两部分组成,decoder(解码器)和 encoder(编码器)Netty的编码和解码Netty提供的编码器:StringEncoderObjectEncoderNetty提供的解码器:StringDecoderObjectDecoderNetty自带的编码解码器,...

2019-11-24 23:41:19 4725

原创 基于Netty的WebSocket

WebSocketHttp是无状态的,浏览器每次请求,都是创建一个新连接,传输完毕即断开。双方并不能感知对方的状态。而WebSocket是长连接,一次TCP握手,即可建立持久性的连接,并且双方能感知到对方的状态。核心代码:// 因为基于http,所以要添加http编码和解码器pipeline.addLast(new HttpServerCodec());// 以块的方式写,添加Chu...

2019-11-24 23:25:10 282

原创 Netty心跳检测

IdleStateHandlerNetty中的心跳检测机制,根据这个处理器能及时的检测到读/写/读写空闲状态,根据状态进行相应的处理。Triggers an {@link IdleStateEvent} when a {@link Channel} has not performedread, write, or both operation for a while.当没有执行读、写...

2019-11-24 20:53:43 20883

原创 Netty核心组件

BootStrap一个Netty应用通常从一个BootStrap开始,由于配置整个程序BootStrap是配置客户端的启动引导类ServerBootStrap是配置服务端的启动引导类。常用方法ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup)用于设置BossGroup、workGro...

2019-11-23 23:07:28 8212

原创 Netty编写简单的Http服务器

HttpServerpublic class MyHttpServer { public static void main(String[] args) { NioEventLoopGroup bossGroup = new NioEventLoopGroup(); NioEventLoopGroup workGroup = new NioEventL...

2019-11-23 20:11:13 1558

原创 ChannelFuture异步模型

Netty中的操作,如bind、Connect、Write,会返回一个ChannelFuture。调用者并不能立刻获得结果,而是通过Future-Listener机制,用户可以主动获取或等待通知机制获取IO操作结果。Netty的异步模型建立在Future和Callback之上的。假设有个方法func,计算非常耗时,等待显然不合适。那么可以在调用func时,返回一个Future对象,后续可以...

2019-11-23 20:01:34 480

原创 零拷贝zero copy

零拷贝的概念零拷贝:CPU不执行拷贝数据的任务优点:减少不必要的cpu拷贝减少内存带宽的使用减少系统态用户态的切换传统IO四次用户态系统态的切换四次数据拷贝(两次DMA拷贝,两次cpu拷贝)硬盘到内核空间内核空间到用户空间(cpu)用户空间到socket buffer(cpu)socket buffer到协议引擎基于SendFile实现的零拷贝两次用户...

2019-11-22 22:39:10 23849

原创 Netty介绍及NIO详解

Netty简介Netty是一个异步、基于事件驱动的网络应用框架BIO、NIO、AIO的简介应用场景分布式系统中各节点远程过程调用(RPC:Dubbo)游戏服务器Hadoop通信NIO三大组件NIO三大组件:Selector、Channel、Buffer一个Channel对应一个Buffer,一个Selector管理多个Channel,一个线程对应一个Selecto...

2019-11-20 22:37:48 9281 14

原创 Golang面向对象

Golang中虽然没有class,但是通过结构体struct依然支持OOP(封装、多态、继承)。

2019-11-19 21:35:06 10341

原创 BIO、AIO、NIO

BIO:一个线程一个连接,一个请求就需要一个线程。线程的开销大。AIO:一个有效请求一个线程,客户端的IO请求都死由OS先完成了再通知服务器去启动线程处理。NIO:一个请求一个线程,但连接请求都是先注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程处理。...

2019-11-16 22:51:18 389

原创 Golang函数

init函数Golang中:先初始化全局变量执行init函数执行main函数\var t = test()// init方法func init() { fmt.Println("init method...")}func test()int{ fmt.Println("test methond") return 0}func main(){ fmt.Prin...

2019-11-16 21:19:14 6442

原创 Shell 命令启动Docker Container

Linux虚拟机重启后,都要手动启动多个Docker Container,着实麻烦,使用Shell命令可以减去这个麻烦。创建文件,添加可执行权限touch startcontiner.shchomd +x startcontainer.sh编写startcontainer.sh#!/bin/sh #chkconfig: 35 ...

2019-11-16 11:53:46 18052

原创 Socket通信示例Demo

Socket网络通信服务器端:/** * BIO : 阻塞io **/@Datapublic class BioServer { private ServerSocket serverSocket; private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 20, 1, Ti...

2019-11-15 21:26:06 2107

原创 Golang基础:数据类型

标识符由字母、数字、下划线组成。单独的_代表匿名变量(用来忽略无用的返回值)。变量声明和初始化声明格式:var 变量名 变量类型如var name stringvar age int = 1000// 批量声明var( name sring age int)// 短变量声明n := 789常量声明常量声明格式:const pi = 3.1415926...

2019-11-15 14:52:15 779

原创 线程池的使用

ThreadPoolExecutor的参数以及四种线程池

2019-11-12 17:36:38 22416

原创 数据库三范式

第一范式字段不可再分。第二范式每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。如,订单表中有(订单号、用户姓名、订单金额、用户电话、身份证号),一个用户有多个订单,多个用户信息,这样订单表中的用户信息就是冗余的,应当设计为订单表(订单号、订单金额、用户编号)第三范式数据不能有传递依赖,即只能有直接关系而非间接关系。a -&g...

2019-11-06 23:25:03 98

原创 事务

四大特性A:原子性。要么全都执行,要么全不执行C:一致性。多个事务对同一个数据读取的结果相同。I:隔离性。事务之间相互独立,不会相互影响。D:持久性。一旦提交,数据永久保存,即使数据库故障。并发事务的带来的问题脏读:一个事务读到了另一个事务还没提交的数据。丢失修改:一个事务先读取了数据,另一个事务也读取了此数据,两个事务先后对一个数据修改,那么前一个事务修改的数据就丢失...

2019-11-06 12:09:52 200

原创 乐观锁与悲观锁

悲观锁每次修改时,都会认为别人会修改,所以在拿数据时加锁。别人拿数据就会阻塞到它拿到锁。传统的关系型数据库就使用了这种悲观锁,行锁、表锁,读锁、写锁,都是在操作之前先上锁。Java的Synchronized和Reetrantlock都是这种独占锁。乐观锁每次修改时都认为别人不会在这期间修改数据,所以不会上锁。但是更新的时候,会判断一下在此期间数据有没有其它线程修改。乐观锁的实...

2019-11-06 10:09:38 137

原创 Elasticsearch笔记

Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎。基本概念倒排索引也叫反向索引,与之相对的是正向索引。通俗的说,正向索引是通过文档去查找单词,反向索引则是通过单词去查找文档。如有两个文本:w1:hello,wordw2:hello,james倒排索引的处理步骤:找到所有的单词:hello、world、james找到这些单词对应的位置:...

2019-11-06 09:38:48 136

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除