自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 打造一个亿级平台的 Hbase集群

打造一个亿级平台的 Hbase集群

2023-02-18 12:23:04 192

原创 十六.Netty实现RPC框架

1.RPC是什么?RPC,远程过程调用,可以做到像本地调用一样调用远程服务,是一种进程间的通信方式,概念想必大家都很清楚,可以换一种思考方式去理解RPC,也就是从本地调用出发,进而去推导RPC调用1.本地函数调用本地函数是我们经常碰到的,比如下面示例:public String sayHello(String name) { return "hello, " + name;}我们只需要传入一个参数,调用sayHello方法就可以得到一个输出,也就是输入参数——>方法体——&gt

2021-03-26 12:03:06 270

原创 十五.Netty启动过程源码剖析

1.examplepublic final class SimpleServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); try {

2021-03-23 14:03:03 120

原创 十四.Netty之TCP粘包和拆包

1. 基本介绍TCP是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的由于TCP无消息保护边界, 需要在接收端处理消息边界问题,也就是我们所说的粘包、拆包问题, 看一张图假设客户端分别发送了两个数据包

2021-03-18 18:28:52 164

原创 十三.Netty之编解码器

1.概念Netty提供了一系列实用的编码解码器,他们都实现了ChannelInboundHadnler或者ChannelOutcoundHandler接口。在这些类中,channelRead方法已经被重写了。以入站为例,对于每个从入站Channel读取的消息,这个方法会被调用。随后,它将调用由已知解码器所提供的decode方法进行解码,并将已经解码的字节转发给ChannelPipeline中的下一个ChannelInboundHandler。2.解码器(Decoder)对于解码器,Netty中主要提

2021-03-18 16:46:21 292

原创 十二.Netty之WebSocket

一.WebSocket简介在Http1.0和Http1.1协议中,我们要实现服务端主动的发送消息到网页或者APP上,是比较困难的,尤其是现在IM(即时通信)几乎是很多APP都需要实现的功能,我们往往采用一种轮询的方式让终端去请求服务器获取对应的数据,相信很多做过IM通信的朋友应该深有感触,其实大多数的轮询都是无效的(即没有获得到任何的数据);另外一个方面,每一次轮询都是一个完整的Http请求,而根据Http协议,每一次请求都要在Header中携带大量的参数,这无疑对带宽也是一种极大的消耗。html5的诞

2021-03-17 19:12:43 192

原创 十一.Netty之心跳检测

1.心跳检测“心跳"听起来感觉很牛X的样子,其实只是一种检测端到端连接状态的技术。举现有A、B两端已经互相连接,但是他们之间很长时间没有数据交互,那么A与B如何判断这个连接是否可用呢?我们通常的做法就是,让任何一方,例如我们让A端,定时的发送(例如每5秒钟)一句问候"Are you ok?”,如果B都到来自A的问候,回了一句"GUN",A收到了来自B的信息,也不在乎B到底给我回了什么,即可以断定与B的连接并没有断开;如果没有收到来自B的任何回复,过段时间在去发送问候,那么我们通常认为连续3次问候,都没有收

2021-03-17 18:27:54 192

原创 十.Netty之群聊实列

实例要求:编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)实现多人群聊服务器端:可以监测用户上线,离线,并实现消息转发功能 客户端:通过channel可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)代码实现NettyGroupChatServerpublic class NettyGroupChatServer { private int port; public NettyGroupChatServer(in

2021-03-17 17:54:21 96

原创 九.Netty之异步模型

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

2021-03-17 14:25:15 85

原创 八.Netty之任务队列

回顾上一篇讲过,NioEventLoop表示一个不断循环的执行任务的线程,每个NioEventLoop都有一个Selector和TaskQueue。在整个事件循环中PipeLine会处理ChannelHandler,如果PipeLine长时间处理ChannelHandler,会造成任务的堵塞,异步处理出现了,把处理时间长的任务提交到TaskQueue中。...

2021-03-17 10:40:11 332

原创 七.Netty之线程模型

1.线程模型介绍目前存在的线程模型传统阻塞 I/O 服务模型 (缺点大家都知道,资源浪费,阻塞)Reactor 模式(Netty 主要基于主从 Reactor 多线程模型做了一定的改进,其中主从 Reactor 多线程模型有多个 Reactor)根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现 :单 Reactor 单线程单 Reactor 多线程主从 Reactor 多线程...

2021-03-15 18:26:16 129

原创 六.NIO与零拷贝

1.1 零拷贝可以这么理解,能减少不必要的数据拷贝次数,就算是“零拷贝”。Linux2.4内核新增sendfile系统调用。磁盘数据通过DMA(direct memory access)拷贝到内核Buffer,直接通过DMA拷贝到NIC (network interface controller)Buffer,无需CPU拷贝,这是操作系统意义上的零拷贝。...

2021-03-09 16:09:26 1305 3

原创 五.NIO应用-群聊实例

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

2021-03-09 15:47:45 116 1

原创 四.NIO网络编程原理分析

NIO网络编程关系梳理图NIO 非阻塞网络编程相关的(Selector、SelectionKey、ServerScoketChannel和SocketChannel) 关系梳理图当客户端连接时,会通过ServerSocketChannel 得到 SocketChannelSelector 进行监听 select 方法, 返回有事件发生的通道的个数.将socketChannel注册到Selector上, register(Selector sel, int ops), 一个selector上可以注

2021-03-08 16:13:02 156

原创 三.NIO三大核心原理

NIO 三大核心原理每个channel 都会对应一个BufferSelector 对应一个线程, 一个线程对应多个channel(连接)该图反应了有三个channel 注册到 该selector //程序程序切换到哪个channel 是有事件决定的, Event就是一个重要的概念Selector 会根据不同的事件,在各个通道上切换Buffer 就是一个内存块 , 底层是有一个数组数据的读取写入是通过Buffer, 这个和BIO , BIO 中要么是输入流,或者是输出流, 不能双向,但是NI

2021-03-05 17:31:16 157

原创 二.Netty之I/O模型

I/O模型I/O 模型基本说明I/O模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能Java共支持3种网络编程模型/IO模式:BIO、NIO、AIOJava BIO :同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销Java NIO :同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用

2021-03-05 16:52:53 116

原创 一.Netty介绍和应用场景

一.netty介绍和应用场景1.Netty介绍Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github上的独立项目。Netty是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。Netty主要针对在TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用。Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景Netty 的特性统一的 API,几乎不需要怎么修改代码就

2021-03-05 16:40:06 304

空空如也

空空如也

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

TA关注的人

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