Netty简单认识
简介
- Netty 是由JBOSS提供的一个 Java开源框架, 现在是 Github上的开源项目
- Netty 是一个异步的、基于事件驱动的网络应用框架式, 用以快速开发高性能、高可靠性的网路IO程序
- Netty主要针对在TCP协议下, 面向客户端的高并发应用, 或者 Peer to Peer(对等的) 场景下的大量数据持续传输的应用。
- Netty的本质就是对NIO(None Blocked IO) 的一种封装。
应用场景
互联网行业:
- 在分布式系统中, 各个节点之间需要远程服务调用, 高性能的RPC框架必不可少, Netty作为异步高性能的通信框架, 往往作为基础通信组件被这些RPC框架使用。
典型应用:
- 阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信(默认使用Netty, 可改为mina, grizzy).
大数据领域
- Hadoop 的高性能通信和序列化组件(AVRO 实现数据文件共享) 的 RPC 框架, 默认采用Netty进行跨节点通信
- 常用的 Netty Service 其实是 Netty 框架二次封装。
- Spark1.6及其之后的版本, 之前使用的是akka, 1.6实验性的引入netty, akka在2.0版本移除, 只使用netty(其实akka底层还是用了netty...)。
- Kafka 零拷贝技术(其实本质上是省去了操作系统由内核态且换到用户态的过程)
I/O 模型
用什么样的channel(通道)进行数据的发送和接收, 很大程度上决定了通信的性能。
Java共支持3种网络编程模型/IO模式: BIO(Blocked IO)、NIO(None Blocked IO)、AIO(Asynchronized IO)
BIO: 同步且阻塞(传统阻塞型), 服务器实现模式为一个连接一个线程, 即客户端有连接请求时服务器就需要启动一个线程进行处理, 如果该连接不做任何事情就会造成不必要的线程开销
NIO: 同步非阻塞, 服务器实现模式为一个线程处理多个请求(连接), 即客户端发送的连接请求都会注册到多路复用器上, 多路复用轮询到连接有I/O请求就进行处理
AIO: 异步非阻塞, AIO 引入异步channel(通道)的概念, 采用了Proactor模式, 简化了程序编写, 有效的请求才启动线程, 它的特点是先由操作系统完成后才通知服务端程序启动线程去处理, 一般适用于连接数较多且连接时间较长的应用。
- 但是Linux系统并没有提供对AIO的优化, 导致其在Linux上的运行性能不高, 目前用的不多。
适用场景分析
- BIO方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 并发局限于应用中, jdk1.4以前的唯一选择, 但程序简单易理解。
- NIO方式适用于连接数目多且连接比较端的(轻操作) 的架构, 如聊天服务器, 弹幕系统, 服务器间通讯等。编程比较复杂, JDK1.4开始支持
- AIO方式适用于连接数组多且连接比较长(重操作)的架构, 比如相册服务器, 充分调用OS参与并发操作, 编程比较复杂, JDK7开始支持
Netty简单认识的更多相关文章
- Netty——简单创建服务器、客户端通讯
Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程 ...
- Netty简单的HTTP服务器
本文转载自:https://www.cnblogs.com/luangeng/p/7875710.html HTTP协议:略 基于Netty的HTTP协议栈可以方便的进行异步非阻塞的HTTP服务器的开 ...
- Netty简单使用
目录 丢弃服务器 DiscardServerHandler DiscardServer 测试 应答服务器 时间服务器 TimeServerHandler TimeClient TimeClientHa ...
- Netty简单的重连机制
其实重连机制并不是多么多高深的技术,其实就是一个在客户端做一个简单的判断,如果连接断了,那么就重新调用连接服务端的代码 当然,我们重连的动作肯定是发生在断连之后发生的,我们可以在上篇的心跳机制的基础上 ...
- Netty简单介绍(非原创)
文章大纲 一.Netty基础介绍二.Netty代码实战三.项目源码下载四.参考文章 一.Netty基础介绍 1. 简介 官方定义为:”Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地 ...
- 【Netty整理01-快速入门】Netty简单使用Demo(已验证)
多处摘抄或手打,为了十积分厚着脸皮标为原创,惭愧惭愧~本篇文章用于快速入门搭建一个简单的netty 应用,如想稍微深入系统的了解,请参照本人下一篇博客,链接: 参考地址: 官方文档:http://ne ...
- JAVA netty 简单使用
实现一个功能,客户端和服务器 轮流对一个数加+1 服务器 public class Server { public static void main(String[] args) { NioEvent ...
- netty简单样例
package com.example.demohystrix.process; import io.netty.bootstrap.ServerBootstrap; import io.netty. ...
- Netty简单聊天室
1.创建maven项目,在pom.xml中引入netty的jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...
随机推荐
- ubuntu---CUDA 安装注意点总结
安装CUDA前的基础准备: 1.查看内核.gcc版本并记住. 最好 禁止内核更新,以防止以后工作中意外的系统更新使内核自动更新了,与驱动版本不兼容了. 2.禁用 nouveau驱动. 3.多下 ...
- js运动框架及应用
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 3_05_MSSQL课程_Ado.Net_DataSet数据集
//创建一个内存的数据集 DataSet ds=new DataSet("LJK"); //创建一张内存表 DataTable dt01=new DataTable("d ...
- java代理模式的实现方法
package com.sample.sping_ireport.cglib; import java.lang.reflect.InvocationHandler; import java.lang ...
- Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar
一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...
- 表格中td限宽溢出以省略号代替
table.ms-listviewtable { table-layout:fixed; width: 100%; } table.ms-listviewtable td[role="gri ...
- UniGUI 之UniDBGrid(05)
UniGUI 之UniDBGrid(05) 目录1]DataSource设置2]显示MEMO类型里的文字3]显示悬浮提示4]显示当前记录及总记录数5]读取所有记录,及分页6]在前面加上序号列7]不显示 ...
- 【剑指Offer面试编程题】题目1384:二维数组中的查找--九度OJ
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含 ...
- Kubernetes——机密数据管理
k8s——机密数据管理1.secret2.configMap kubectl explain secret #查看帮助手册然后将你要加密的变量值做些许处理:echo 123 | base64 ...
- tomcat项目已存在错误
Could not publish server configuration for Apache Tomcat v8.0-1 at localhost.Multiple Contexts have ...