Netty简介

一、什么是netty?

高性能 事件驱动

异步非堵塞 基于NIO的客户端,服务器端编程框架

稳定性和伸缩性

二、Netty的使用场景

高性能领域

多线程并发领域

异步通信领域

四种IO介绍

1、BIO通信

(1)一个线程负责连接

(2)一个请求一个应答

(3)缺乏弹性伸缩能力 当客户端访问增大,线程造成进程宕机。不能对外服务。

2、伪异步IO通信

(1)线程池负责连接 当有新的客户端进来,将客户端的socket封装成Task投入线程池。

(2)m请求n应答 将所有的请求放到一个线程池中,由线程池来分配线程;做到异步通信。

(3)线程池阻塞 线程池可以设置最大访问数。并发不断增加,可能造成阻塞。

3、NIO通信

(1)缓冲区Buffer ————>>> 他是一个对象,包含读和写的数据,所有数据都是用缓冲区处理的。

(2)通道Channel ————>>> 他就像是一个自来水管一样,网络数据通过Channel读取或写入,通道与流的不同之处在于通道是双向的,流只是在一个水平线上移动,一个流他必须是inputStrem或outputStrem的子类,通道可以用于读写,或者二者同时进行。

(3)多路复用器Selector ————>>> 它会不断的轮询注册在其上的channel,如果channel发生读或写事件,那么这个channel就处于就绪状态,会被selector轮询出来,然后通过selectorKey获取就channel集合,进行后续的io操作。由于jdk使用epoll()替代传统的selector实现,所以他并没有最大连接句柄限制,也就意味着只需要一个负责轮询selector的线程就可以接入成千上万的channel.

4、AIO通信

(1)连接注册读写事件和回调函数

(2)读写方法异步

(3)主动通知程序

总结:AIO异步通道通过两种方式获得操作结果,第一种就是通过返java.util.concurrent.Futur对象,第二种方式是为操作提供一个回调参数java.nio.channels.CompletionHandler,这个回调类包含completed,failed两个方法。那么AIO的套接字通道是真正的异步非阻塞io,他不需要对注册的多路复用器进行轮询操作就能实现异步读写,简化了NIO模型,这就是AIO通信。

Netty的WebSocket通信实现

一、Netty实现WebScoket通信案例

(1)编写存储整个工程的全局配置类 ===》 这里需要有一个Channel对象来存储每一个接入进来的客户端 ===》 ChannelGroup对象 ===》为它赋值的是一个默认的ChannelGroup(DefaultChannelGroup)这里他需要一个GlobalEventExecutor.INSTANCE参数。

(2)编写WebSocket核心类。

这个类继承了SimpleChannelInboundHandler抽象类,同时这个抽象类又继承了ChannelHandlerAdapter类,然后重写ChannelHandlerAdapter类中的channelActive、channelInactive、channelReadComplete、exceptionCaught四个方法和该抽象类的messageReceived方法。在重写messageReceived方法时编写需要的业务处理方法和握手请求业务方法就行了。

(3)编写初化连接时的各个组件

这个类是继承了ChannelInitializer抽象类。重写默认的initChannel方法,调用传入的socketChannel对象通道,将各个组件写入该对象。

netty与socket对比_Netty之WebSocket和四种IO介绍相关推荐

  1. Netty之WebSocket和四种IO介绍

    Netty简介 一.什么是netty? 高性能 事件驱动 异步非堵塞 基于NIO的客户端,服务器端编程框架 稳定性和伸缩性 二.Netty的使用场景 高性能领域   多线程并发领域   异步通信领域 ...

  2. 集成 websocket 的四种方案

    集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency><groupId>org.springframework.boot</gro ...

  3. java websocket注解_【websocket】spring boot 集成 websocket 的四种方式

    集成 websocket 的四种方案 1. 原生注解 pom.xml org.springframework.boot spring-boot-starter-websocket WebSocketC ...

  4. 【Netty】Netty解决粘包和拆包问题的四种方案

    在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接.由于微服务往对方发送信息的时候,所有的请求都是使 ...

  5. Netty 解决粘包和拆包问题的四种方案

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://my.oschina.net/ ...

  6. Netty解决粘包和拆包问题的四种方案

    在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接.由于微服务往对方发送信息的时候,所有的请求都是使 ...

  7. netty与socket对比_java原生各种IO和Netty框架的对比

    异步非阻塞I/O JDK 1.4的NIO框架经常被称为异步非阻塞I/O,但是,如果严格按照UNIX网络编程模型和JDK的实现进行区分,实际上它只能被称为非阻塞I/O,不能叫异步非阻塞I/O. JDK ...

  8. 四种区块链底层技术形态的对比解读

    新世纪以来,互联网技术快速发展,催生了以平台经济为典型的各种新业态.新模式,深刻影响和改变了人类社会的生产方式.生活方式和社会治理方式.然而在推动经济和社会发展的同时,基于数据点对点传输建立的互联网也 ...

  9. EF、Chloe、SqlSugar、DOS.ORM四种ORM框架的对比

    文章目录 四种orm框架的对比 1.什么是ORM? 2.四种框架的基本信息对比如下表: 3.四种框架的耗时情况如下: 4.四种框架都支持哪些功能? 5.就个人使用而言,比较推荐哪个框架? 6.SqlS ...

  10. Netty的Socket编程详解-搭建服务端与客户端并进行数据传输

    场景 Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

最新文章

  1. linux mysql 无法识别,Linux下MySQL 5.7.23无法远程连接解决方案
  2. 推荐系统算法_机器学习和推荐系统(二)推荐算法简介
  3. 柜位预測(一)——显示柜位曲线图
  4. Android adb shell 命令
  5. python程序中断时,输出打印日志
  6. Go线程安全:我们不用考虑同步的问题 不用考虑数据污染的情况
  7. 换脸系列——眼鼻口替换
  8. 关于RGB屏调试的一些知识(转)
  9. 架构设计中的方法学(七)
  10. 诗和远方:无题(四十五)
  11. 【LeetCode】Remove Nth Node From End of List
  12. 11.history命令历史
  13. 让Fiddler调试localhost和127.0.0.1
  14. Ubuntu设置中文
  15. java 模板生成pdf文件
  16. Linux 网易云 deb 包下载 安装
  17. 一些网站后台模板源码分析
  18. RT-Thread邮箱
  19. c++ 聚合/POD/平凡/标准布局 介绍
  20. 【采坑】CocosCreator 使用对象池再次创建对象创建节点时出现的某明的bug,节点使用了动作系统

热门文章

  1. 《Linux命令行与shell脚本编程大全》 第一、二章 学习笔记
  2. 如何在 Mac 上控制对摄像头的访问?
  3. 云原生生态周报 Vol. 3 | Java 8 ❤️ Docker
  4. Linux基本命令之seq
  5. Ehlib 单元格 图像绘制 代码
  6. Logstash配置方法
  7. Eclipse中的快捷键……希望朋友们能熟练使用
  8. 公司危机、下岗困局、不受重视,程序员该如何面对职场挫折?
  9. JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)
  10. dell vfoglight