netty与socket对比_Netty之WebSocket和四种IO介绍
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介绍相关推荐
- Netty之WebSocket和四种IO介绍
Netty简介 一.什么是netty? 高性能 事件驱动 异步非堵塞 基于NIO的客户端,服务器端编程框架 稳定性和伸缩性 二.Netty的使用场景 高性能领域 多线程并发领域 异步通信领域 ...
- 集成 websocket 的四种方案
集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency><groupId>org.springframework.boot</gro ...
- java websocket注解_【websocket】spring boot 集成 websocket 的四种方式
集成 websocket 的四种方案 1. 原生注解 pom.xml org.springframework.boot spring-boot-starter-websocket WebSocketC ...
- 【Netty】Netty解决粘包和拆包问题的四种方案
在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接.由于微服务往对方发送信息的时候,所有的请求都是使 ...
- Netty 解决粘包和拆包问题的四种方案
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://my.oschina.net/ ...
- Netty解决粘包和拆包问题的四种方案
在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接.由于微服务往对方发送信息的时候,所有的请求都是使 ...
- netty与socket对比_java原生各种IO和Netty框架的对比
异步非阻塞I/O JDK 1.4的NIO框架经常被称为异步非阻塞I/O,但是,如果严格按照UNIX网络编程模型和JDK的实现进行区分,实际上它只能被称为非阻塞I/O,不能叫异步非阻塞I/O. JDK ...
- 四种区块链底层技术形态的对比解读
新世纪以来,互联网技术快速发展,催生了以平台经济为典型的各种新业态.新模式,深刻影响和改变了人类社会的生产方式.生活方式和社会治理方式.然而在推动经济和社会发展的同时,基于数据点对点传输建立的互联网也 ...
- EF、Chloe、SqlSugar、DOS.ORM四种ORM框架的对比
文章目录 四种orm框架的对比 1.什么是ORM? 2.四种框架的基本信息对比如下表: 3.四种框架的耗时情况如下: 4.四种框架都支持哪些功能? 5.就个人使用而言,比较推荐哪个框架? 6.SqlS ...
- Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
场景 Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...
最新文章
- linux mysql 无法识别,Linux下MySQL 5.7.23无法远程连接解决方案
- 推荐系统算法_机器学习和推荐系统(二)推荐算法简介
- 柜位预測(一)——显示柜位曲线图
- Android adb shell 命令
- python程序中断时,输出打印日志
- Go线程安全:我们不用考虑同步的问题 不用考虑数据污染的情况
- 换脸系列——眼鼻口替换
- 关于RGB屏调试的一些知识(转)
- 架构设计中的方法学(七)
- 诗和远方:无题(四十五)
- 【LeetCode】Remove Nth Node From End of List
- 11.history命令历史
- 让Fiddler调试localhost和127.0.0.1
- Ubuntu设置中文
- java 模板生成pdf文件
- Linux 网易云 deb 包下载 安装
- 一些网站后台模板源码分析
- RT-Thread邮箱
- c++ 聚合/POD/平凡/标准布局 介绍
- 【采坑】CocosCreator 使用对象池再次创建对象创建节点时出现的某明的bug,节点使用了动作系统