关于mina的setSendBufferSize体验
为什么80%的码农都做不了架构师?>>>
先说说事件回放
某天客户端要求说tcp包要小点,这样他开的buffer就小点
那我就找到acceptor.getSessionConfig().setSendBufferSize(int);这个方法设置发送byte buffer的大小,但我把他设置成1,让他每个包都即时发送
mina的setSendBufferSize方法是一个接口,他会调用java.net.Socket.setSendBufferSize文件
jdk的描述是这样的
将此 Socket 的 SO_SNDBUF 选项设置为指定的值。平台的网络连接代码将 SO_SNDBUF 选项用作设置底层网络 I/O 缓存的大小的提示。
由于 SO_SNDBUF 是一种提示,想要验证缓冲区设置大小的应用程序应该调用 getSendBufferSize()。
意思就是发送buffer吧
用工具在客户端捉包的结果显示最大包 还是1460,但tcp包id的数量不同了
举个例子:
SendBufferSize为1024时(15:55:45.225中的225就是包id号)捉取的数据包如下
时间(.包id) 包长 数据长度 具体数据
15:55:45.225 63 9 xxxxxxxx(具体数据)
15:55:45.225 63 19 xxxxxxxx(具体数据)
15:55:45.225 63 39 xxxxxxxx(具体数据)
15:55:45.225 63 932 xxxxxxxx(具体数据)
15:55:47.225 63 93 xxxxxxxx(具体数据)
15:55:47.225 63 9 xxxxxxxx(具体数据)
15:55:47.225 63 9 xxxxxxxx(具体数据)
SendBufferSize为1时(15:55:45.225中的22X就是包id号)捉取的数据包如下
时间(.包id) 包长 数据长度 具体数据
15:55:45.225 63 9 xxxxxxxx(具体数据)
15:55:45.225 63 19 xxxxxxxx(具体数据)
15:55:45.226 63 39 xxxxxxxx(具体数据)
15:55:45.227 63 932 xxxxxxxx(具体数据)
15:55:47.228 63 93 xxxxxxxx(具体数据)
15:55:47.229 63 9 xxxxxxxx(具体数据)
15:55:47.230 63 9 xxxxxxxx(具体数据)
可以明显看出当SendBufferSize 1时,tcp包发送非常及时(基本上没有做buffer >.<)
这个时候问题鬼异的问题就来了
先来看看现象
服务器发送一个超过2920数据长度的包
mina代码约为这样
IoBuffer buffer = ba.allocate(3320, false);
buffer.flip();
session.write(buffer);
网卡底层tcp包就会分成三个发
数据大小分别是1460 1460 400
测试
内网服务器为linux 时就会丢了最后一个包即长度为400的包(5,5.2,5.3都是这样)
windows和ubuntu没有问题,这个时候奇怪的问题又来了,我们的外网linux服务器没有问题(ps 内网和外网服务器的linux版本是一样的,还是同一长碟,但硬件不一样)
真NN的奇怪,为什么只有内网的linux才会这样,外网的就不会呢,,为什么windows,和ubuntu就不会有这个问题??????
最后我们把setSendBufferSize设回为1024就没有这个问题了
转载于:https://my.oschina.net/javagg/blog/3356
关于mina的setSendBufferSize体验相关推荐
- Mina Berkeley QANet测试网zkApp初体验
1. 引言 Mina系列博客有: Mina概览 Mina的支付流程 Mina的zkApp Mina中的Pasta(Pallas和Vesta)曲线 Mina中的Schnorr signature Min ...
- Camera开发系列之六-使用mina框架实现视频推流
章节 Camera开发系列之一-显示摄像头实时画面 Camera开发系列之二-相机预览数据回调 Camera开发系列之三-相机数据硬编码为h264 Camera开发系列之四-使用MediaMuxer封 ...
- Mina中的zkApp交易snark
1. 引言 前序博客有: Mina中的支付交易snark(针对Payment交易) Mina的zkApp Mina中的树结构 --账号树 Mina中的user_command交易目前有: 1)Sign ...
- Mina中的支付交易snark
1. 引言 前序博客有: Mina的支付流程 Mina中目前的交易类型主要有: Coinbase交易:给产块者激励和手续费的交易,为内部交易. Fee_transfer交易:给snark worker ...
- Mina中的Snark Worker
1. 引言 Mina系列博客有: Mina概览 Mina的支付流程 Mina的zkApp Mina中的Pasta(Pallas和Vesta)曲线 Mina中的Schnorr signature Min ...
- Mina的zkApp
1. 引言 前序博客有: Mina概览 Mina的支付流程 2021年12月,由Mina基金会和Mina生态合作伙伴O(1) Labs 与 ZK Hack 联合举办了 ZK Hack zkApps W ...
- java mina框架实例_Apache Mina框架实践
1.为什么要用Apache Mina框架 ApacheMina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能.高扩展性的网络通信应用,Mina 提供了事件驱动.异步(Mi ...
- Mina中的wrap snark
1. 引言 前序博客有: Mina技术白皮书 所谓wrap snark,是将Tick snark(Mina代码中称为step proof)包裹为Tock snark(Mina代码中称为wrap pro ...
- Mina中的区块证明
1. 引言 Mina的Pickles支持2种类型的tag: Side_loaded Compiled type ('var, 'value, 'n1, 'n2) t ={ kind : kind; i ...
最新文章
- 使用VB.NET加快代码开发速度
- a, b = b, a+b
- Java工程师必备技能
- Hession矩阵与牛顿迭代法
- php 控制器分组模式,控制器分组路由
- 数据结构知识点大汇总(六)
- android 炫酷3d主页,五款超酷安卓手机3D桌面软件合辑推荐
- 分治法——查找问题 —— 寻找一个序列中第k小的元素和查找最大和次大元素
- [Database] 不知道表名和字段查找值=1234的数据.
- apollo-配置管理中心-安装
- NodeJs——子进程
- 百度网盘有linux客户端吗,bcloud-百度网盘Linux客户端
- 【PAT_1054】The Dominant Color
- andriod自带模拟器使用代理
- 你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。 解决方案
- python采集原神高清pv图和语音
- 绘制图形与3D增强技巧(三)----三角形图元TRANGLE
- 【Demo】idea搭建SpringBoot和AJAX前后端数据交互
- Kaggle注册以及问题解决
- android:layout_margin真实含义 及 自定义复合控件 layout()执行无效的问题解决
热门文章
- traceview android studio,TraceView 的正确打开方式
- C++_pointer-like classes,function-like classes
- python在线编辑器最新_skulpt搭建Python在线编译器(一):下载、安装
- 详细的聊聊接口性能优化的11个小技巧 不收藏对不起我
- 三星note5 android版本区别吗,三星Note5哪种颜色好看?三星Note5四种颜色区别对比图解...
- jQuery实现浮动层跟随页面滚动效果
- 正则匹配以除了开头和结尾要有个大写_27.Google analytics 中的 正则表达式
- c类事业编计算机岗面试题,事业单位综合应用C类:让人头疼的摘要题到底怎么写?...
- python 写文件 换行_Python学习16:读写文件
- php js array,JavaScript等同于PHP的in_array()