galaxy
  • Introduction
  • knowledge
    • JAVA
      • 多态
      • Socket
      • Servlet
      • HashMap
      • TCP
      • DelayQueue
      • Java反射
      • Java Proxy 和 CGLIB 动态代理
      • JVM
        • 类生命周期
        • JVM内存模型
        • 类加载器与双亲委派模型
        • JVM中堆和栈的区别
      • java.time
    • Spring
      • 常用注解
        • @Transactional
      • Spring Data JPA
      • AOP
      • IOC/DI
      • Spring 事务
      • Spring Boot 启动原理解析
      • Spring MVC
        • Spring MVC 2
      • MVC
    • 分布式
      • RPC框架
      • MQ
      • dubbo
        • 环境部署
        • demo
      • 分布式RPC框架性能大比拼
      • 序列化
      • ZK
        • 本地安装zk
        • ZK详解
      • 分布式
        • 分布式锁
      • 限流熔断技术
    • DB
      • Mysql
        • 索引
      • 事务
      • 数据库连接池
        • 工作原理
        • 连接池技术背景
        • 百度百科
        • 主流数据库连接池
      • MongoDB
        • 适用场景
        • MongoDB Java异步驱动快速指南
        • 异步Mongo驱动的性能测试
        • 使用规范
        • 使用场景2
      • Spring Data JPA
      • 数据库设计三大范式
      • 存储过程
      • 视图
      • 乐观锁与悲观锁
      • 分库分表
      • Redis3
        • 其它
        • Redis
        • 场景
        • 分布式及其它
    • Test
      • NGrinder
      • QPS与并发数
    • 并发编程
      • volatitle
      • 锁
      • ThreadLocal
      • AQS
      • CAS
      • RateLimiter
    • 线程池
      • Executors
      • ScheduledThreadPoolExecutor
      • 终止线程池原理
      • demo
  • MST目录
    • 算法&数据结构
      • 算法
      • 数据结构
      • 算法题
      • 经典算法
  • Tool
    • Git
    • Netty5
      • 一些案例
      • Netty源码分析
        • 一、服务器绑定过程分析
        • 二、线程模型分析
        • 三、Channel如何注册OP_ACCEPT, OP_READ, OP_WRITE
        • 四、事件分发模型
        • 五、ByteBuf缓冲区
        • 六、CodeC编解码分析
        • 七、异步执行Future和Promise
      • Netty5.0架构剖析和源码解读
    • idea
  • issue
    • Connection reset
    • 该如何从 Java 8 升级到 Java 10
    • 阿里巴巴为什么不用 ZooKeeper 做服务发现
  • Linux
    • command
Powered by GitBook
On this page
  • 前言
  • 问题
  • 解决方案

Was this helpful?

  1. Tool

Netty5

PreviousGitNext一些案例

Last updated 6 years ago

Was this helpful?

官方网站:

参考网站翻译版:

一些参考:Netty系列之Netty高性能之道:

实战精髓:

netty 4 源码解读:

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

Netty是一个异步事件驱动的网络应用框架 用于快速开发可维护的高性能协议服务器和客户端。

前言

问题

现如今我们使用通用的应用程序或者类库来实现系统之间地互相访问,比如我们经常使用一个HTTP客户端来从web服务器上获取信息,或者通过web service来执行一个远程的调用。

然而,有时候一个通用的协议和他的实现并没有覆盖一些场景。比如我们无法使用一个通用的HTTP服务器来处理大文件、电子邮件、近实时消息比如财务信息和多人游戏数据。我们需要一个合适的协议来处理一些特殊的场景。例如你可以实现一个优化的Ajax的聊天应用、媒体流传输或者是大文件传输的HTTP服务器,你甚至可以自己设计和实现一个新的协议来准确地实现你的需求。

另外不可避免的事情是你不得不处理这些私有协议来确保和原有系统的互通。这个例子将会展示如何快速实现一个不影响应用程序稳定性和性能的协议。

解决方案

换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比如客户端和服务端的协议。Netty大大简化了网络程序的开发过程比如TCP和UDP的 Socket的开发。

“快速和简单”并不意味着应用程序会有难维护和性能低的问题,Netty是一个精心设计的框架,它从许多协议的实现中吸收了很多的经验比如FTP、SMTP、HTTP、许多二进制和基于文本的传统协议,Netty在不降低开发效率、性能、稳定性、灵活性情况下,成功地找到了解决方案。

有一些用户可能已经发现其他的一些网络框架也声称自己有同样的优势,所以你可能会问是Netty和它们的不同之处。答案就是Netty的哲学设计理念。Netty从第一天开始就为用户提供了用户体验最好的API以及实现设计。正是因为Netty的设计理念,才让我们得以轻松地阅读本指南并使用Netty。

Netty是最流行的NIO框架,它的健壮性、功能、性能、可定制性和可扩展性在同类框架都是首屈一指的。它已经得到成百上千的商业/商用项目验证,如Hadoop的RPC框架Avro、RocketMQ以及主流的分布式通信框架Dubbox等等。

.最佳实践

(1)数据通信

我们需要了解在真正项目中如何使用Netty,大体上对于一些参数设置都是根据服务器性能决定的。我们需要考虑的问题是两台机器(甚至多台)使用Netty怎样进行通信。

大体上分为三种: ①使用长连接通道不断开的形式进行通信,也就是服务器和客户端的通道一直处于开启状态,如果服务器性能足够好,并且客户端数量也比较上的情况下,推荐这种方式。 ②一次性批量提交数据,采用短连接方式。也就是说先把数据保存到本地临时缓存区或者临时表,当达到界值时进行一次性批量提交,又或者根据定时任务轮询提交,

这种情况的弊端是做不到实时性传输,对实时性要求不高的应用程序中推荐使用。 ③使用一种特殊的长连接,在某一指定时间段内,服务器与某台客户端没有任何通信,则断开连接。下次连接则是客户端向服务器发送请求的时候,再次建立连接。 在这里将介绍使用Netty实现第三种方式的连接,但是我们需要考虑两个因素: ①如何在超时(即服务器和客户端没有任何通信)后关闭通道?关闭通道后又如何再次建立连接? ②客户端宕机时,我们无需考虑,下次重启客户端之后就可以与服务器建立连接,但服务器宕机时,客户端如何与服务器端通信?

2)心跳检测

我们使用Socket通信一般经常会处理多个服务器之间的心跳检测,一般来讲我们去维护服务器集群,肯定要有一台或多台服务器主机(Master),然后还应该有N台(Slave),那么我们的主机肯定要时时刻刻知道自己下面的从服务器的各方面情况,然后进行实时监控的功能。这个在分布式架构里交做心跳检测或者心跳监控。最佳处理方案是使用一些通信框架进行实现,Netty就可以做这样的事。

是一个提供异步事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

Netty
http://netty.io/
http://ifeve.com/netty5-user-guide/
http://www.infoq.com/cn/articles/netty-high-performance
https://waylau.gitbooks.io/essential-netty-in-action/content/ADVANCED TOPICS/Thread model overview.html
https://segmentfault.com/a/1190000007282628