Netty连接通道中的Channel参数模型

ChannelOption(Channel中的连接参数)

ChannelOption.SOBACKLOG

ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数,服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接,多个客户端来的时候,服务端将不能处理的客户端连接请求放在队列中等待处理。所以操作系统里一般有两个队列,一个是ACCEPT队列,保存着已经完成了TCP的三次握手的连接,一个SYN队列,服务器正在等待TCP的三次握手完成的队列。BSD派生系统里backlog指的就是SYN队列的大小,在Linux的实现里backlog相对来说就含糊不清了,有些内核版本指的是ACCEPT队列+SYN队列合起来的大小,有的是指SYN队列的大小。但是从Linux2.2开始,backlog的参数行为在Linux2.2中发生了变化,现在它指定等待接受的完全建立的套接字的队列长度,而不是不完整的连接请求的数量,不完整套接字队列的最大长度可以使用/proc/sys/net/ipv4/tcp_max_sync_backlog设置,默认128。如果backlog参数大于/proc/sys/net/core/somaxconn 中的值,那么它会被静默截断为值128.在2.4.25之前的内核中,此限制是硬编码值,后续内核版本也可以通过vim /etc/sysctl.conf来修改,包括前面说的tcp_max_sync_backlog也可以在此处修改,然后通过命令sysctl -p生效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意
等待建立连接的队列和不完整的连接的队列是不一样的,等待建立连接的队列是指已经握手的队列,但是此时此刻还没建立起连接,Channel还没有被打开,而不完整的连接的队列,是指还没有握手完的连接

ChannelOption.SO_REUSEADDR

ChannelOption.SO_REUSEADDR对应与套接字选项中的SO_REUSEADDR,这个参数表示
允许重复使用本地地址和端口,比如,多网卡(IP)绑定相同端口,比如某个进程非正常退出,
内核需要一定的时间才能够释放此端口

ChannelOption.SO_KEEPALIVE

ChannelOption.SO_KEEPALIVE参数对应于套接字选项中的SO_KEEPALIVE,该参数用于设置TCP连接,当设置该选项以后,连接会测试连接状态,这个选项用于可能长时间没有数据交流的连接。当设置该选项以后,如果在两小时内没有数据的通信,TCP会自动发送一个活动探测数据报文

ChannelOption.SO_SNDBUF/ChannelOption.SO_RCVBUF

ChannelOption.SO_SNDBUF参数对应于套接字选项中的SO_SNDBUF,
ChannelOPtion.SO_RCVBUF参数对应于套接字选项中的SO_RCVBUF
这两个参数用于操作接受缓冲区和发送缓冲区的大小,接收缓冲区用于保存网络协议栈内收到的数据,知道应用程序读取成功,发送缓冲区用于保存发送数据,直到发送成功

ChannelOption.SO_LINGER

ChannelOption.SO_LINGER参数对应于套接字选项中的SO_LINGER,Linux内核默认的处理方式是
当用户调用close()方法的时候,函数返回,在可能的情况下,尽量发送数据,不一定保证会发剩余的
数据,造成了数据的不确定性,使用SO_LINGER可以阻塞close()的调用时间,直到数据完全发送

ChannelOption.TCP_NODELAY

ChannelOption.TCP_NODELAY参数对应于套接字选项中的TCP_NODELAY,该参数的使用与Nagle
算法有关,Nagle算法是将小的数据包组装为更大的帧然后进行发送,而不是输入一次发送一次,
因此在数据包不足的时候会等待其他数据的到了,组装成大的数据包进行发送,虽然该方式有效提高
网络的有效负载,但是却造成了延时,而该参数的作用就是禁止使用Nagle算法,使用小数据即时传输,
与TCP_NODELAY相对应的是TCP_CORK,该选项是需要等到发送的数据量最大的时候,一次性发送数据,
适用于文件传输

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据领域的数据仓库

在大数据领域,数据仓库(Data Warehouse)是一个用于存储、管理和分析大量数据的集中式系统。它从多个异构数据源收集数据,对数据进行清洗、转换和整合,然后将其存储在一个集中的位置,以支持复杂的查询、报告…

Windows命令行设置IP地址

Windows命令行设置IP地址 一、常规设置IP的方法 开始-控制面板-网络连接-本地连接-属性-常规Internet协议,选择自动获取,或手动设置IP和DNS。 二、命令行设置IP的方法 2.1. netsh命令介绍 2.1.1. 设置动态获取IP地址和和自动获取DNS(DHCP&a…

传输层协议 ——— TCP协议

TCP协议 TCP协议谈谈可靠性为什么网络中会存在不可靠?TCP协议格式TCP如何将报头与有效载荷进行分离?序号与确认序号 确认应答机制(ACK)超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字…

使用ESP-01/ESP-01S接入Homekit远程控制电器

一、准备材料 ESP-01/ESP-01s 芯片 、 继电器模块 、 烧录器 二、下载固件和烧录软件 固件地址https://github.com/RavenSystem/esp-homekit-devices 烧录软件下载地址:https://drive.google.com/file/d/1_M4EzolaJWpYXts_FwUIqH8pZWqy-fye/view 三、烧录固件 …

基于gici多传感器融合定位的图优化代码学习

前言 本文是基于gici-open项目对因子图优化GraphC类 的学习,由于此项目的最小二乘估计部分采用了google的开源ceres库,可以从ceres的官方帮助文档处了解:Solving Non-linear Least Squares — Ceres Solver (ceres-solver.org) 在graph.h的…

springboot(ssm大学生计算机基础网络教学系统 在线课程系统Java系统

springboot(ssm大学生计算机基础网络教学系统 在线课程系统Java系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mys…

JavaScript事件

事件 事件-表单 元素获得焦点 onfocus: onfocus 事件在对象获得焦点时发生。鼠标点击获取焦点是发生 onblur: onblur 事件发生在对象失去焦点时,比如说你有个文本框,你鼠标点击进去,只有在离开的时候才会执行onblu…

【原创】Qt库open62541 MinGW编译

一、前言 为了统一公司的驱动层开发,准备采用OpcUA的方式转发底层数据,而服务器有Windows Server,也有CentOS,因此想用Qt开发一个基于MinGW的OpcUA Server,这样就能跨平台部署。这里记录一下,希望对你也有用…

Compose | UI组件(十五) | Scaffold - 脚手架

文章目录 前言一、Scaffold脚手架简介二、Scaffold的主要组件三、如何使用Scaffold四、Compose中Scaffold脚手架的具体例子例子1:基本Scaffold布局例子2:带有Drawer的Scaffold布局例子3:带有Snackbar的Scaffold布局 总结 前言 Compose中的Sca…

Python循环语句——for循环临时变量作用域

一、引言 在Python编程中,变量是程序运行的核心。其中,临时变量扮演着重要的角色,用于存储中间结果或临时数据。然而,这些临时变量并非随意存在,它们受到作用域的限制。了解临时变量的作用域对于编写高效、可维护的代…

神经网络 | 常见的激活函数

Hi,大家好,我是半亩花海。本文主要介绍神经网络中必要的激活函数的定义、分类、作用以及常见的激活函数的功能。 目录 一、激活函数定义 二、激活函数分类 三、常见的几种激活函数 1. Sigmoid 函数 (1)公式 (2&a…

代码随想录算法训练营第三十天 回溯算法总结、332.重新安排行程、51. N皇后、37. 解数独

代码随想录算法训练营第三十天 | 回溯算法总结、**332.重新安排行程、**51. N皇后、37. 解数独 回溯算法总结 回溯就是递归的副产品,只要有递归就会有回溯 回溯就是一个暴力搜索法,并不是什么高效的算法 回溯算法的题目分类: 组合&#…

LeetCode 第28天

93. 复原 IP 地址 这题挺难的,实际上我觉得分割字符串的题都挺难的,即使知道了回溯算法,也是无从下手。因为要对字符串进行处理,关于分割点不知道怎么处理。关键部分理解在代码里。 class Solution { private: // 判断分割的子串…

GPT每日面试题—如何理解JS原型链

充分利用ChatGPT的优势,帮助我们快速准备前端面试。今日问题:如何理解JS原型链? Q:如果在前端面试中,被问到如何理解JS原型链,怎么回答比较好? A:当面试官问到如何理解 JavaScript …

12.03 校招 实习 内推 面经

绿*泡*泡VX: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、自动驾驶一周资讯 - 英伟达自动驾驶中国团队扩招;地平线与安波福首个合作成果取得定点;通用汽车自动驾驶Cruise首席执行官辞职 自动驾驶一周资讯 - 英伟达自动驾…

问题:创业者在组建创业团队时,在个人特征和动机方面更应该注重创业者的( ) #知识分享#微信#媒体

问题:创业者在组建创业团队时,在个人特征和动机方面更应该注重创业者的( ) 参考答案如图所示

hook函数——useState

useState useState是React中的一个Hook函数,用于在函数组件中添加状态。基本使用语法如下: const [state, setState] useState(initialState) state:表示当前状态的值setState:更新状态的函数initialState:初始状态…

为什么是0.1uF电容?

旁路电容是电子设计中常用的电容器之一,主要用于过滤电源噪声和稳定电源电压。在实际应用中,0.1uF电容器是最常用的旁路电容值之一,那么为什么常用旁路电容是0.1uF而不是其他值?这个值又是怎么来的呢?本文将深入探讨这…

基于微信小程序的校园二手交易平台

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【Java基础常见面试题】- Java SE vs Java EE

Java SE vs Java EE Java SE(Java Platform,Standard Edition): Java 平台标准版,Java 编程语言的基础,它包含了支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件。Java SE 可以用于构建桌面应用程序或简…