为什么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体验相关推荐

  1. Mina Berkeley QANet测试网zkApp初体验

    1. 引言 Mina系列博客有: Mina概览 Mina的支付流程 Mina的zkApp Mina中的Pasta(Pallas和Vesta)曲线 Mina中的Schnorr signature Min ...

  2. Camera开发系列之六-使用mina框架实现视频推流

    章节 Camera开发系列之一-显示摄像头实时画面 Camera开发系列之二-相机预览数据回调 Camera开发系列之三-相机数据硬编码为h264 Camera开发系列之四-使用MediaMuxer封 ...

  3. Mina中的zkApp交易snark

    1. 引言 前序博客有: Mina中的支付交易snark(针对Payment交易) Mina的zkApp Mina中的树结构 --账号树 Mina中的user_command交易目前有: 1)Sign ...

  4. Mina中的支付交易snark

    1. 引言 前序博客有: Mina的支付流程 Mina中目前的交易类型主要有: Coinbase交易:给产块者激励和手续费的交易,为内部交易. Fee_transfer交易:给snark worker ...

  5. Mina中的Snark Worker

    1. 引言 Mina系列博客有: Mina概览 Mina的支付流程 Mina的zkApp Mina中的Pasta(Pallas和Vesta)曲线 Mina中的Schnorr signature Min ...

  6. Mina的zkApp

    1. 引言 前序博客有: Mina概览 Mina的支付流程 2021年12月,由Mina基金会和Mina生态合作伙伴O(1) Labs 与 ZK Hack 联合举办了 ZK Hack zkApps W ...

  7. java mina框架实例_Apache Mina框架实践

    1.为什么要用Apache Mina框架 ApacheMina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能.高扩展性的网络通信应用,Mina 提供了事件驱动.异步(Mi ...

  8. Mina中的wrap snark

    1. 引言 前序博客有: Mina技术白皮书 所谓wrap snark,是将Tick snark(Mina代码中称为step proof)包裹为Tock snark(Mina代码中称为wrap pro ...

  9. Mina中的区块证明

    1. 引言 Mina的Pickles支持2种类型的tag: Side_loaded Compiled type ('var, 'value, 'n1, 'n2) t ={ kind : kind; i ...

最新文章

  1. 使用VB.NET加快代码开发速度
  2. a, b = b, a+b
  3. Java工程师必备技能
  4. Hession矩阵与牛顿迭代法
  5. php 控制器分组模式,控制器分组路由
  6. 数据结构知识点大汇总(六)
  7. android 炫酷3d主页,五款超酷安卓手机3D桌面软件合辑推荐
  8. 分治法——查找问题 —— 寻找一个序列中第k小的元素和查找最大和次大元素
  9. [Database] 不知道表名和字段查找值=1234的数据.
  10. apollo-配置管理中心-安装
  11. NodeJs——子进程
  12. 百度网盘有linux客户端吗,bcloud-百度网盘Linux客户端
  13. 【PAT_1054】The Dominant Color
  14. andriod自带模拟器使用代理
  15. 你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。 解决方案
  16. python采集原神高清pv图和语音
  17. 绘制图形与3D增强技巧(三)----三角形图元TRANGLE
  18. 【Demo】idea搭建SpringBoot和AJAX前后端数据交互
  19. Kaggle注册以及问题解决
  20. android:layout_margin真实含义 及 自定义复合控件 layout()执行无效的问题解决

热门文章

  1. traceview android studio,TraceView 的正确打开方式
  2. C++_pointer-like classes,function-like classes
  3. python在线编辑器最新_skulpt搭建Python在线编译器(一):下载、安装
  4. 详细的聊聊接口性能优化的11个小技巧 不收藏对不起我
  5. 三星note5 android版本区别吗,三星Note5哪种颜色好看?三星Note5四种颜色区别对比图解...
  6. jQuery实现浮动层跟随页面滚动效果
  7. 正则匹配以除了开头和结尾要有个大写_27.Google analytics 中的 正则表达式
  8. c类事业编计算机岗面试题,事业单位综合应用C类:让人头疼的摘要题到底怎么写?...
  9. python 写文件 换行_Python学习16:读写文件
  10. php js array,JavaScript等同于PHP的in_array()