Netty

news/2025/4/1 7:34:29/

Netty

背景知识

  • 网络编程基础
  1. TCP协议
    TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议
    详情看TCP/IP面试题

为什么要有“连接”?什么是”连接“

Byte Stream Oriented vs Message Oriented

  1. Socket API
Socket()
Bind()
Listen()
Accept()
Read()
Write()
Close()

Socket of C/S

  1. BIO & NIO
  • BIO
ServerSocket
Socket
BIO服务模型: thread per request/thread pre connection

BIO面临的C10K挑战

  • NIO
ServerSocketChannel
SocketChannel
Selector
- OP_ACCEPT
- OP_CONNECT
- OP_READ
- OP_WRITE
  1. Reactor 模式
    Reactor模式### 手写Reactor模式的挑战
  2. 处理op_write事件:写忙时需要注册op_write,不忙时注销op_write
  3. 处理ByteBuffer: byteBuffer API非常难用
  4. 处理粘包:需要处理接收到的字节状态
  5. 处理多个Selector
  6. 提供优雅的业务编程模型
    10.根据环境运行参数

网络编程总结

  • socket API

  • 使用多路复用

  • 处理协议,粘包问题

  • 编程框架

  • Netty

  1. Netty介绍

Netty is an NIO client server framework that enables quick and easy development
of network appications such as protocol servers and clients

  1. Netty核心组件
Channel - SocketChannel
EventLoop - Selector
ChannelPipeline
ChannelHandler
Bootstrap - Main
ByteBuf - ByteBuffer
  • EventLoop
    事件循环

ChannelHandler & Pipeline

ChannelHandler & Pipeline

  1. Netty源码讲解及实例

TCP/IP协议

  • 拥塞控制
    使用拥塞控制来完成相关的数据流服务

Socket API

Socket()
Bind()
Listen()
Accept()
Read()
Write()
Close()

sync queue
accept queue

BIO & NIO

BIO
ServerSocket
Socket

BIO的Java实现代码

1111

NIO (EventLoop)
ServerSocketChannel
SocketChannel

NIO的Java实现代码

2222

一个人可以负责多个连接
监听一万个连接里面任意状态变化
如果监听到某个Socket有连接,就派发给后面干活的线程

serverChannel.register(selector, SelectionKey.OP_ACCEPT);

Selecter API

channel.register(selector) 注册监听
while(true) + select() 轮询事件
selectedKeys() 获得SelectionKey对象,表示channel的注册信息
SelectionKey.attach()对SelectKey关联任何对象


http://www.ppmy.cn/news/55791.html

相关文章

「SQL面试题库」 No_50 产品销售分析 II

🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试&#xff0…

Java——程序控制结构集合详讲

顺序控制 没有什么特殊的语句,就是从上至下依次执行每一个语句,这种方式叫做顺序控制。 分支控制 1. if-else(单分支,双分支,多分支,嵌套分支) 2. switch 都跟c语言一样 if-els…

具备“记忆”功能的VBA目录选择器

大家使用任意一款浏览器(例如:Chrome、Edge)下载文件时,如果【另存为】对话框选择C:\Download,那么下次再次使用【另存为】功能,对话框默认显示C:\Download,而不是根目录。 在VBA开发中调用目录…

二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)

文章目录 二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)2.1 开发环境2.2 创建maven工程2.3 创建User实体2.4 创建MyBatis的核心配置文件2.5 创建mapper接口2.6 创建MyBatis的映射文件2.7 通过junit测试功能 二、搭建MyBatis采用xml方式…

IGH EtherCAT主站代码解析:控制零差电机以位置模式运⾏

IGH是开源的Linux实时系统主站,能够基于在硬件上基于以太⽹、软件上依托于实时内核、实时驱动完 成低延迟的控制,在要求精确控制的机械臂、切削平台上会⽤到,所谓吹毛求疵者,将来都是⼲⼤事的 (嘿嘿) 一、学习前提 此篇⽂档⽤作分享,不时修正 给对Linux编程有基础有⾼实…

算法刷题|1143.最长公共子序列、1035.不相交的线、53.最大子数组和

最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&a…

TF-IDF (BigData, Data Mining)

TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。 TF是词频(Term Frequency), IDF是逆文本频率指数(Inverse Document Frequency)。 简介 TF-IDF是一种统计方法,用以评估一字词…

NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_实际操作01---大数据之Nifi工作笔记0040

我们基于之前做的从mysql中获取数据,然后同步数据到mysql中,基于这个案例来做,可以看到上面是,这个案例的所有处理器,我们基于这个来改造. 1.首先我这里重新安装了一个mysql8.0.33 ,安装的是windows版本的,如果你是linux版本的,这里也说一下,如何开启binlog功能,首先要开启bin…