netty学习笔记一

蔚落 2022-05-12 12:08 325阅读 0赞

netty是基于nio(非阻塞io)的高性能网络通信框架

什么是阻塞 ?

一直等待在那里,知道有返回值才会处理

例如:

i. Socket socket = serverSocket.accept();

ii. int data = is.read(in);

socket编程基础知识,readline() 与 read区别,byte是为从文件读取提供的缓冲,byte[1024] 一般读取为1024整数倍,看内存的大小;

每个Java程序员都应该记住,Java使用的是Unicode编码。所有的字符在JVM中(内存中)只有一个存在形式就是Unicode。所以一个char占用2字节。当要写入文件中时,就按程序指定的UTF-8编码对“汉字”重新编码。

字符编码参考资料:

https://blog.csdn.net/dream_goon/article/details/37691589

IO模型(一个服务员服务一个客户)

70

NIO模型(一个服务员可以服务多个客户)

70 1

扩展:

70 2

epll中内核会自动会写数据回Uer Application

===========================================================================================

AIO(异步io)

jdk7中新增的一些与文件(网络)I/O相关的一些api

资料参考:

https://www.jianshu.com/p/c5e16460047b

缺点:

因为AIO的实施需充分调用OS参与,IO需要操作系统支持、并发也同样需要操作系统的支持,所以性能方面不同操作系统差异会比较明显。

===========================================================================================

BIO:

问题?
1.阻塞
2.一个服务端与一个客户端服务,只有一个客户端断开之后;另一个客户端才能连接

缺点总结:(一个服务端只能为一个客户端服务,在高并发场景下很快耗尽服务器资源)

解决方案(伪异步io):

  1. 不断的 new Thread()…
    问题:不断的创建资源耗尽服务器资源
  2. 用线程池解决?
    问题:底层还是 new Thread(),客户一直连接无法回收
  3. 用限制了线程数的线程池, 100个?
    问题:到了101个的时候就挂掉了,无法服务,必须等待

===========================================================================================

NIO

解决的问题:一个客户端请求接入后,服务端必须创建一个线程来处理这条链路,如果客户端无限增长,服务器资源不够用 , nio就是为了处理大量的客户端连接(高并发)。

nio:

Seletor通道的管理器

ServerSocketChannel(ServerSocket):只关心客户端连接事件

ServerChannel(Socket):关心读写事件

SelectionKey:事件集合

ByteBuffer

  1. 单线程Reactor模型

client —-> server(Acceptor处理客户端发送的事件,Reactor反应堆转发客户端的请求(相当于Dispatch)

  1. ---> Handler(进行具体的操作))

2.多线程Reactor模型

-— 创建多个Reactor反应堆

3.主从多线程Reactor模型

client —-> server(Main Reactor (Acceptor Thread pool)处理客户端发送的事件,Sub Reactor(IO Thread pool)反应堆转发客户端的请求(相当于Dispatch)

  1. ---> Handler(进行具体的操作))

发表评论

表情:
评论列表 (有 0 条评论,325人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Netty自学-Netty学习()

    什么Netty? Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客

    相关 netty学习笔记

    Netty与原生Nio的区别 原生的nio,只简单封闭了ByteBuffer以及Channel,也就是网络IO操作以及对这些字节的缓存,字节的编码与解码、粘包与拆包

    相关 netty学习笔记

    netty是基于nio(非阻塞io)的高性能网络通信框架 什么是阻塞 ? 一直等待在那里,知道有返回值才会处理 例如: i. Socket socket = serve