Netty序列化算法&参数调优

目录

一、扩展序列化算法

1、Java

2、Json

二、参数调优

1、CONNECT_TIMEOUT_MILLIS

2、SO_BACKLOG

3、ulimit-n

4、TCP_NODELAY

5、SO_SNDBUF & SO_RCVBUF

6、ALLOCATOR

7、RCVBUF_ALLOCATOR


一、扩展序列化算法

1、Java

我们先写Java中jdk的序列方式,写一个序列化的接口有序列化和反序列化方法,搞个枚举去实现它,然后重写这两个方法。

2、Json

Json的序列化和反序列化我们用的谷歌的gson工具来实现

二、参数调优

1、CONNECT_TIMEOUT_MILLIS

属于SocketChannel的参数

用在客户端建立连接时,如果在指定毫秒内无法连接,就会抛出timeout异常

区分开另一个参数:SO_TIMEOUT主要用在堵塞IO,阻塞IO中accept,read都是无线等待,如果不希望一直阻塞,使用他就可以调整超时时间。

这里要注意:

底层原理是个定时任务,他会读取配置文件的时候创建定时任务,当超过时间就会抛出异常,如果中间又执行了,如果时间内连接成功了,会把任务取消掉

2、SO_BACKLOG

属于ServerSocketChannel的参数

Tcp三次握手完后的连接是在全连接队列里面的,需要服务端一个个去accept,所以accept这个操作是在三次握手之后的。

 

这里就限制为2,一个时间只能处理2个连接,当第三个来的时候就会抛出异常了 

window的默认值是200,linux和mac的128,如果配置文件存在以配置为准

3、ulimit-n

属于操作系统参数,限制一个进程能打开的最大文件描述符的数量

4、TCP_NODELAY

属于SocketChannal参数,如果发送数据的时候有很多小数据包,会把这些小数据包攒一批然后才发出去,为了减少网络请求,但是这样可能会带来延迟就要等待多了才发。建议关闭,默认是false开启的,建议改为true。

5、SO_SNDBUF & SO_RCVBUF

发送缓冲区和接受缓冲区。都是SocketChannal的参数,SO_RCVBUF也可以用于serverSocketChannel参数,建议设置到ServerSocketChannal上,不需要自己调整,操作系统会自动根据网络流量来调整大

6、ALLOCATOR

  • 他就是ByteBuf分配器,有了分配器就可以创建ByteBuf,ctx.alloc()
  • 属于SocketChannal参数

他分配出来的ByteBuf默认是池化的,直接内存

底层是读取环境变量,如果有就用,没有的话如果是安卓就unpooled不是池化,其他就是池化。内存也是,如果默认就是直接内存,也可以自己设置把noPreferDirect改为true,不首选直接内存改为true,默认为false

这个Allocator其实就是byteBuf分配器,就知道这两个配置参数就行

7、RCVBUF_ALLOCATOR

  • 属于SocketChannel参数
  • 控制netty接收缓冲区大小
  • 负责入站数据的分配,决定入站缓冲区的大小(并可以动态调整),统一采用direct直接内存,具体池化还是非池化还是由ALLOCATOR来决定的

为什么是直接内存固定的呢?因为我们从网络读取数据的时候,直接内存的效率是比堆内存的效率高的,因为零拷贝优化,少一次复制,所以netty对io的读写就强制用直接内存了。但是在handler内部通过allocator分配出来的byteBuf我们就可以自己指定。

他底层会调用之前的ALLOCATOR分配器来分配,所以由分配器来决定池化还是非池化,然后调用分配器的ioBuffer来创,这个ioBuffer是固定直接内存的,这个ioBuffer会传入参数,这个参数是大小,源码里面是传入guess方法返回的大小,这个是猜测需要的大小动态进行调整的,如果实际数据量大就会是个比较大的,小就小,根据这几次的数据量来决定。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卒获有所闻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值