自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (4)
  • 收藏
  • 关注

原创 Java基础 - int越界问题

private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static void main(String[] args) throws ParseException { Date date = simpleDateFormat.parse("2021-04-05 09:28:04"); // 当前日期 2021-04-05 11:05:04

2021-04-05 11:30:04 529

原创 RestTemplate对URL参数编码

一、RestTemplate类public <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = this.httpEntityCallback(re

2021-04-01 19:07:28 1395

原创 Netty(四十五) - 实现RPC框架 Dubbo

一、需求说明

2021-03-28 23:56:39 142

原创 Netty(四十四) - RPC调用流程

一、RPC 基本介绍1)、RPC(Remote Procedure Call):远程过程调用,是一个计算机通信协议。该协议允许运行在一台计算机的程序调用另一台计算机的子程序,而程序员无需额外的为这个交互作用编程。2)、两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样。3)、常见的RPC框架有:比较知名的如阿里的Dubbo、google的grpc、go语言的rpcx、Apache的thrift、Spring旗下的Spring Cloud。二、RPC 调用流程术语说明

2021-03-26 20:45:29 131

原创 Netty(四十三) - 任务加入异步线程池

一、基本说明1)、在 Netty 中做耗时的,不可预料的操作,比如数据库、网络请求,会严重影响 Netty 对 Socket 的处理速度。2)、解决方案就是将耗时任务添加到异步线程池中。但是就添加线程池这步操作来讲,可以有2种方式:处理耗时业务的第一种方式----handler中加入线程池处理耗时业务的第二种方式----Context中添加线程池二、处理耗时业务的两种方式2.1 handler中加入线程池@Sharablepublic class EchoServerHandler ex

2021-03-25 23:14:40 571

原创 Netty(四十二) - EventLoop源码剖析

一、基本说明分析:EventLoopGroup bossGroup = new NioEventLoopGroup(1);二、源码剖析2.1 NioEventLoop 继承图1)、ScheduledExecutorService 接口表示是一个定时任务接口,EventLoop 可以接受定时任务。2)、EventLoop 接口,Netty 接口文档中说明该接口作用:一旦 Channl 注册了,就处理该 Channel 对应的所有 I/O 操作。3)、SingleThreadEventExecut

2021-03-24 16:55:27 164

原创 Netty(四十一) - 心跳(heartbeat)源码剖析

一、基本说明Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一个服务-----心跳机制heartbeat。通过心跳检查对方是否有效,这是 RPC 框架中必不可少的功能。1)、Netty 提供了 IdleStateHandler、ReadTimeoutHandler、WriteTimeoutHandler 三个 Handler 检测连接的有效性,重点分析 IdleStateHandler2)、简单描述序号名称作用1IdleState

2021-03-22 22:10:26 2817

原创 Netty(四十) - pipeline源码剖析

一、pipeline 调度 handler1)、当一个请求进来的时候,pipeline 是如何调用内部的这些 handler 的?2)、首先,当一个请求进来的时候,会第一个调用 pipeline 的相关方法,如果是入站事件,这些方法由 fire 开头,表示开始管道的流动。让后面的 handler 继续处理。1.1 说明1)、当浏览器输入 http://localhost:8007,可以看到会执行 handler2)、在Debug时,可以将断点下在 DefaultChannelPipeline 类的

2021-03-22 10:24:55 152

原创 Netty(三十九) - pipeline源码剖析

一、基本说明Netty 中的 ChannelPipeline、ChannelHandler 和 ChannelHandlerContext 是非常核心的组件,我们从源码来分析 Netty 是如何设计这三个核心组件的,并分析是如何创建和协调工作的。二、 三大核心组件介绍2.1 三者关系1)、 每当 ServerSocket 创建一个新的连接,就会创建一个 Socket,对应的就是目标客户端。2)、每一个新创建的 Socket 都将会分配一个全新的 ChannelPipeline(简称pipeline

2021-03-21 22:39:56 277

原创 Netty(三十八) - Netty请求过程源码剖析

一、基本说明1)、服务器启动后肯定是要接收客户端请求并返回客户端想要的信息,Netty 在启动后是如何接收客户端请求的?2)、源码包:io.netty.example二、请求过程源码剖析1)、从服务器启动源码中,可以得知,服务器最终注册了一个 Accept 事件等待客户端的连接。我们也知道,NioServerSocketChannel 将自己注册到了 boss 单例线程池(reactor线程)上,也就是 EventLoop。2)、EventLoop 的作用是一个死循环,在这个死循环中要处理三件事:

2021-03-20 22:48:04 236

原创 Netty(三十七) - Netty启动源码剖析

一、绑定端口分析1)、服务器绑定端口是在 bind 方法里完成的2)、在bind 方法代码中,创建了一个端口对象,并做了一些判断,核心代码为:doBind 方法public ChannelFuture bind(SocketAddress localAddress) { validate(); if (localAddress == null) { throw new NullPointerException("localAddress"); } retu

2021-03-20 16:40:06 130 2

原创 Netty(三十六) - Netty启动源码剖析

一、基本说明1)、只有看过Netty源码,才能说是真正掌握了Netty框架。2)、在 io.netty.example 包下,有很多Netty源码案例,可以用来分析。二、启动过程源码剖析2.1 源码剖析目的用源码分析的方式走一下 Netty(服务器)的启动过程,更好的理解 Netty 的整体设计和运行机制。...

2021-03-19 22:16:09 201

原创 Netty(三十五) - TCP粘包和拆包解决方案

一、解决方案1)、使用 自定义协议 + 编解码器 来解决2)、关键就是要解决 服务器端每次读取数据长度的问题,这个问题解决,就不会出现服务器多读或少读数据的问题,从而避免了 TCP粘包和拆包二、应用实例1)、要求客户端发送 5 个 Message 对象,客户端每次发送一个 Message 对象2)、服务器端每次接收一个Message,分 5 次进行解码,每读取到一个Message,会回复一个Message对象给客户端...

2021-03-16 21:49:55 145 1

原创 Netty(三十四) - TCP粘包和拆包

一、基本介绍1)、TCP 是面向连接的,面向流的,提供高可靠性服务。

2021-03-15 23:57:19 86

原创 Netty(三十三) - Log4j整合到Netty

1)、在 Maven 中添加对Log4j的依赖,在 pom.xml 中添加以下内容: <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> &l

2021-03-14 09:10:42 386

原创 Netty(三十二) - Netty其它常用编解码器

一、解码器-ReplayingDecoder1)、继承父类public abstract class ReplayingDecoder<S> extends ByteToMessageDecoder2)、ReplayingDecoder 扩展了 ByteToMessageDecoder 类,使用这个类,我们不必调用 readableBytes() 方法。参数 S 指定了用户状态管理的类型,其中 Void 代表不需要状态管理3)、应用实例:使用 ReplayingDecoder 编写解码

2021-03-13 21:18:09 96

原创 Netty(三十一) - Netty的handler链调用机制

一、实例1

2021-03-13 21:17:53 894

原创 Netty(三十) - Netty入站和出站机制

一、入站和出站机制说明1)、Netty的主要组件:Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipeline等。2)、ChannelHandler充当了处理入站和出站数据的应用程序逻辑的容器。例如:实现ChannelInboundHandler接口(或ChannelInboundHandlerAdapter),就可以接收入站事件和数据,这些数据会被业务逻辑处理。当要给客户端发送响应时,也可以从ChannelInboundHandler冲刷

2021-03-08 20:54:01 930

原创 Netty(二十九) - Protobuf使用步骤

1、加入 Protobuf 依赖在 Maven 项目中引入 Protobuf 依赖,下载相关的 jar 包,在 pom.xml 中加入:<!--protobuf--><dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.6.1</version>&lt

2021-03-07 14:52:35 257

原创 Netty(二十八) - Protobuf

一、基本介绍1)、Protobuf 是 Google 发布的开源项目,全称 Google Protocol Buffers,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC【远程过程调用 Remote Procedure Call】数据交换格式。2)、参考文档:https://developers.google.com/protocol-buffers/docs/proto3)、Protobuf 是以 message 的方式来管理数据的。4)、

2021-03-07 14:51:46 293 1

原创 Netty(二十七) - 编解码器机制

一、编码和解码基本介绍1)、编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码。2)、codec(编解码器)的组成部分有两个:decoder(解码器)和encoder(编码器)。encoder负责把业务数据转换成字节码数据,decoder负责把字节码数据转换成业务数据。二、Netty自带编解码器机制1)、StringEncoder和StringDecoder:对字符串数据进行编解码2)、ObjectEncoder和ObjectDecoder

2021-03-05 21:16:07 100

原创 Netty(二十六) - Websocket实例

一、实例要求1)、Http协议是无状态的,浏览器和服务器间的请求响应一次,下一次会重新创建连接2)、要求:实现基于Websocket的长连接的全双工的交互3)、改变Http协议多次请求的约束,实现长连接,服务器可以发送消息给浏览器4)、客户端浏览器和服务器端会相互感知,比如服务器关闭了,浏览器会感知,同样浏览器关闭了,服务器会感知。...

2021-03-04 22:03:53 198

原创 Netty(二十五) - Netty心跳检测机制实例

一、实例要求1)、编写一个Netty心跳检测机制案例,当服务器超过3秒没有读时,就提示读空闲2)、当服务器超过5秒没有写操作时,就提示写空闲3)、实现当服务器超过7秒没有读或者写操作时,就提示读写空闲二、服务器端public class MyServer { public static void main(String[] args) throws InterruptedException { // 创建两个线程组 EventLoopGroup bossG

2021-03-02 21:34:42 121

原创 Netty(二十四) - 应用实例:群聊系统

一、实例要求1)、编写一个Netty群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)2)、实现多人聊天3)、服务器端:可以检测用户上线、离线,并实现消息转发功能4)、客户端:通过channel可以无阻塞发送消息给其它所有用户,同时可以接收其它用户发生的消息(由服务器转发得到)5)、目的:进一步理解Netty非阻塞网络编程机制二、服务器端群聊系统服务器端:public class GroupChatServer { private int port; // 监听端口

2021-03-01 22:45:05 118

原创 Netty(二十三) - Unpooled

一、基本介绍1)、Netty 提供一个专门用来操作缓冲区(即Netty的数据容器)的工具类2)、常用方法:public static ByteBuf copiedBuffer(CharSequence string, Charset charset):通过给定的数据和字符编码返回一个ByteBuf对象(类似于NIO中的ByteBuffer,但有区别)3)、Unpooled 获取Netty的数据容器ByteBufpublic class NettyByteBuf01 { public

2021-02-28 21:45:55 662

原创 Netty(二十二) - Netty核心模块2

一、ChannelHandlerContext1)、保存 Channel 相关的所有上下文信息,同时关联一个 ChannelHandler 对象2)、ChannelHandlerContext 中包含一个具体的事件处理器 ChannelHandler,同时 ChannelHandlerContext 中也绑定了对应的 Pipeline 和 Channel 的信息,方便对 ChannelHandler 进行调用3)、常用方法:ChannelFuture close():关闭通道ChannelHan

2021-02-28 14:02:40 86

原创 Netty(二十一) - Netty核心模块1

一、Bootstrap和ServerBootstrap1)、Bootstrap意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导类,ServerBootstrap是服务器端启动引导类。2)、常见的方法:public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup):该方法用于服务器端

2021-02-28 09:53:58 99

原创 Netty(二十) - Netty入门实例(HTTP)

一、实例要求1)、使用IDEA创建Netty项目2)、Netty服务器在6668端口监听,浏览器发出请求:http://localhost:6668/3)、服务器可以回复消息给客户端:Hello!我是服务器,并对特定请求资源进行过滤4)、目的:Netty可以做Http服务开发,并且理解Handler实例和客户端及其请求的关系...

2021-02-26 19:36:08 153

原创 Netty(十九) -异步模型

一、基本介绍1)、异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者。2)、Netty 中的 IO操作 是异步的,包括 Bind、Write、Connect等操作会简单的返回一个 ChannelFuture3)、调用者并不能立刻获得结果,而是通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果4)、Netty 的异步模型是建立在 future 和 callback

2021-02-25 19:57:26 168

原创 Netty(十八) - taskQueue自定义任务

任务队列中的Task有3种典型使用场景:1)、用户程序自定义的普通任务public class NettyServerHandlerTask01 extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { // 比如这里有一个非常耗时长的业务 -> 异步执行 -&

2021-02-24 23:21:35 249

原创 Netty(十七) - Netty入门实例(TCP)

一、实例要求1)、使用IDEA创建Netty项目2)、Netty服务器在6668端口监听,客户端能发送消息给服务器:“Hello,服务器”3)、服务器可以回复消息给客户端:“Hello,客户端”4)、目的:对Netty线程模型有一个初步认识,便于理解Netty模型理论5)、说明:创建Maven项目,并引入Netty包...

2021-02-24 17:26:45 216

原创 Netty(十六) - Netty模型

Netty主要基于主从Reactors多线程模型做了一定的改进,其中主从Reactor多线程模型有多个Reactor。一、Netty模型简单版1)、BossGroup 线程维护 Selector,只关注Accept事件2)、当接收到Accept事件,获取到对应的SocketChannel,封装成NIOSocketChannel,并注册到Worker线程(事件循环)进行维护3)、当Worker线程监听到Selector中注册的通道发生事件后,就进行处理(由Handler完成),注意:Handler已

2021-02-22 23:21:07 167

原创 Netty(十五) - 线程模型三种实现

一、单Reactor单线程1.1 工作原理1.2 NIO 群聊系统/** * @desc 群聊服务器端 * @author yxs * @date 2021-02-06 16:50 */public class GroupChatServer { // 定义属性 private Selector selector; private ServerSocketChannel listenChannel; private static final int POR

2021-02-20 23:28:06 506

原创 Netty(十四) - 线程模型概述

一、基本介绍

2021-02-18 23:31:13 114

原创 Netty(十三) - Netty概述

一、引言

2021-02-18 09:56:06 122

原创 Netty(十二) - Java AIO

一、基本介绍1)、JDK7 引入了 Asynchronous I/O,即 AIO。在进行 I/O 编程中,常用到两种模式:Reactor和Proactor。Java的NIO就是Reactor,当有事件触发时,服务器端得到通知,进行相应的处理。2)、AIO即NIO2.0,叫做异步不阻塞的IO。AIO引入异步通道的概念,采用了Proactor模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用3)、目前AIO还没有

2021-02-17 23:20:11 172 1

原创 Netty(十) - NIO 应用实例:群聊系统

一、案例要求编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)实现多人群聊服务器端:可以检测用户上线,离线,并实现消息转发功能客户端:通过 channel 可以无阻塞发送消息给其它所有用户,同时可以接收其它用户发送的消息(由服务器转发得到)目的:进一步理解 NIO 非阻塞网络编程机制...

2021-02-07 11:58:49 141

原创 Netty(九) - ServerSocketChannel和SocketChannel

一、ServerSocketChannel1)、ServerSocketChannel 在服务器端监听新的客户端 Socket 连接2)、public abstract class ServerSocketChannel extends AbstractSelectableChannel implements NetworkChannel3)、相关方法方法描述public static ServerSocketChannel open()得到一个 ServerSocketCh

2021-02-06 16:03:45 805 1

原创 Netty(八) - SelectionKey

一、NIO 非阻塞网络编程原理分析NIO 非阻塞网络编程相关的关系(Selector、SelectionKey、ServerSocketChannel和SocketChannel)梳理图:1)、当客户端连接时,会通过 ServerSocketChannel 得到 SocketChannel2)、将 SocketChannel 注册到 Selector 上,public final SelectionKey register(Selector sel, int ops),一个 Selector 上可以

2021-02-06 15:10:33 510

原创 Netty(七) - Selector选择器

一、基本介绍1)、Java 的 NIO

2021-02-04 22:19:35 336 4

taobao-tomcat-7.0.59.tgz

Ali-tomcat 基于Apache-­‐Tomcat 7 – JDK6、JDK7 (websocket) 改动(减掉的) 1) 集群 2) 多应用部署 (只支持单个应用) 3) 官方的数据源 改动(新增的) 1) 模块化系统:Pandora 2) 监控系统: Monitor 3) 诊断⼯工具:HouseMD2 4) 统⼀一⽇日志框架:Taobao-­‐logback

2017-09-28

HTML与CSS入门经典(第8版)

《html与css入门经典(第8版)》是畅销图书《html与css入门经典》的最新版,和过去的版本相同,本书仍然采用直观、循序渐进的方法来为读者讲解使用html与css创建并发布网页的过程,以方便读者掌握。

2017-09-22

空空如也

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

TA关注的人

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