本周强总在组内做了netty分享,内容相当不错,趁着这次分享记录的,以及以前研究,进行一下记录。

java io形式存在三种,一种是BIO传统IO是阻塞IO,面向字符、字节服务都属于这一种。NIO官方意思是新

IO框架,相比原有java io框架,大家更倾向于把NIO理解为无阻塞IO,性能有着极大优势,但编程比原有jdk io框

架复杂不止一个数量级,幸运的事业界有了及其成熟nio框架netty。再有就是AIO无阻塞异步IO,netty2.0实现包

含异步IO实现。

netty是网络通信框架,有及其高效网络通信效率,相比jdk原生NIO复杂,对于实现高性能网络编程实现有着

很好易用性。

netty脱胎JBoss,JBoss一个与Tomcat类似的web容器,相比于tomcat会提供消息队列等更多服务,但JBoss最

终还是惜败于Tomcat,Tomcat成功于简单,应用简单开箱即用,有的时候设计简单就是竞争力。

netty作为性能高效通信框架,有着广泛用途。

以netty为基础可以作为推送框架使用,单台服务器能保持极多用户连接,编写应用得当消息推送框架,单台

服务器可以支持c100k连接。

netty可以作为高性能通信使用,在java rpc中到处都有netty身影。hdfs rpc基于netty构建,开源业界影响最大微

服务框架dubbo通信基于netty实现,京东内部微服务JSF通信也是基于netty实现。netty在java高性能通信场景下,

当前有着垄断的地位。

关于netty版本,Final版本为netty release版本,可用于线上服务,当下最新为4.1.x版本,尽量用4.x版本,因

为3.x版本存在一定内存泄漏问题,并且3.x api与4.x存在着较大差异,新用netty建议从4.x直接用起来。

Netty提供了几个常用的解码器,帮助我们解决这些问题,其实上述的粘包和拆包的问题,归根结底的解决方案

就是发送端给远程端一个标记,告诉远程端,每个信息的结束标志是什么,这样,远程端获取到数据后,根据跟发

送端约束的标志,将接收的信息分切或者合并成我们需要的信息,这样我们就可以获取到正确的信息了。

netty内存泄露,netty编程要注意内存泄露,Netty里四种主力的ByteBuf,
其中UnpooledHeapByteBuf 底下的byte[]能够依赖JVM GC自然回收;而UnpooledDirectByteBuf底下是DirectByteBuffer

,如JAVA碓外内存扫盲贴所述,除了等JVM GC,最好也能主动进行回收;而PooledHeapByteBuf 和 PooledDirectByteBuf,

则必须要主动将用完的byte[]/ByteBuffer放回池里,否则内存就要爆掉。所以,Netty ByteBuf需要在JVM的GC机制之外,

有自己的引用计数器和回收过程。

netty相关好书籍,《Netty权威指南》,作者李林锋,netty领域多年实战着。

扫码关注公众号

netty使用从0到1的更多相关文章

  1. 谈谈如何使用Netty开发实现高性能的RPC服务器

    RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...

  2. Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇

    目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ.基于Java的ActiveMQ/Apache Kafka.基于C/C++的ZeroMQ等等 ...

  3. 基于Netty与RabbitMQ的消息服务

    Netty作为一个高性能的异步网络开发框架,可以作为各种服务的开发框架. 前段时间的一个项目涉及到硬件设备实时数据的采集,采用Netty作为采集服务的实现框架,同时使用RabbitMQ作为采集服务和各 ...

  4. [转]netty对http协议解析原理

    本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...

  5. Netty : writeAndFlush的线程安全及并发问题

    使用Netty编程时,我们经常会从用户线程,而不是Netty线程池发起write操作,因为我们不能在netty的事件回调中做大量耗时操作.那么问题来了 – 1, writeAndFlush是线程安全的 ...

  6. netty研究【1】:编译源代码

    netty作为异步通信底层框架,其优异的性能让我产生了研究他的源码的决定. 代码研究之前,第一步就是要准备环境,至少可以编译通过,下面,就拿github上的4.1分支进行.我的IDE是Intellij ...

  7. Netty学习之客户端创建

    一.客户端开发时序图 图片来源:Netty权威指南(第2版) 二.Netty客户端开发步骤 使用Netty进行客户端开发主要有以下几个步骤: 1.用户线程创建Bootstrap Bootstrap b ...

  8. Netty学习之服务器端创建

    一.服务器端开发时序图 图片来源:Netty权威指南(第2版) 二.Netty服务器端开发步骤 使用Netty进行服务器端开发主要有以下几个步骤: 1.创建ServerBootstrap实例 Serv ...

  9. Netty那点事: 概述, Netty中的buffer, Channel与Pipeline

    Netty那点事(一)概述 Netty和Mina是Java世界非常知名的通讯框架.它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户ne ...

随机推荐

  1. 1192: [HNOI2006]鬼谷子的钱袋

    1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3530  Solved: 2575[Submit][St ...

  2. Turn the corner

    Problem Description Mr. West bought a new car! So he is travelling around the city. One day he comes ...

  3. Android 开发笔记___Intent的使用

    public class ActRequestActivity extends AppCompatActivity implements OnClickListener { private EditT ...

  4. TestNG并行测试

    并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者子组件的能力.TestNG允许我们以并行(多线程)的方式来执行测试.这就意味着基于TestNG测试组 ...

  5. MySQL服务相关

    1.管理员身份运行cmd方法: 在C:\Windows\System32\cmd.exe右键以管理员身份运行 2.查看MySQL服务选项(路径:任务管理器-服务tab-选中任一服务点击打开服务-进入服 ...

  6. 淘宝联盟api调用笔记

    一.流程及主要请求接口 每日凌晨1点开始,服务器定时自动请求淘宝联盟数据,请求完毕之后,执行一个存储过程对数据进行整理,删除过期...购买数量<...的商品......,请求接口分别有(tbk_ ...

  7. "use strict"详解

    参考:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html 目的: 消除JavaScript语法的一些不合理.不严谨之处 ...

  8. winscp连接虚拟机Linux被拒绝的问题解决方案

    输入了正确的账号密码还出现这个错误 我们需要在虚拟机中配置一下,改成这样就行了

  9. 利用java的net包来实在数据采集的功能

    最近有好多朋友问我,数据抓取用java怎么做,就是每天把新浪的内地新闻频道的新闻前20条,抓到自己的网站或系统里,今天我统一在这里提供一个简单的例子,由于在这个过程中还需要解析html字符串,所以,我 ...

  10. map的常用方法

    1.头文件: #include<map> 2.定义: map<string,int>Map; 或: typedef map<string,int> MAP; MAP ...