网络编程
快乐的码农一枚
这个作者很懒,什么都没留下…
展开
-
bossGroup 接收完请求怎么推送到workGroup组的
io.netty.bootstrap.ServerBootstrap.ServerBootstrapAcceptorchannelPipleline默认会有一个headContext --》 ServerBootstrapAcceptor --》 TailContextServerBootstrapAcceptor.channelRead 方法如下public v...原创 2020-01-07 11:28:32 · 290 阅读 · 0 评论 -
netty堆外内存的监控
import io.netty.util.internal.PlatformDependent;import org.springframework.stereotype.Component;import org.springframework.util.ReflectionUtils;import javax.annotation.PostConstruct;import java.lang.reflect.Field;import java.util.concurrent.Executo..原创 2020-06-03 11:11:37 · 695 阅读 · 0 评论 -
Netty的FastThreadLocal速度 优化
jdk的ThreadLocal: ThreadLocalMap 是用数组来维护的,类似HashMap。如果ThreadLocal对象的hash碰撞则使用开放式地址法来解决碰撞问题 当碰撞情况比较多的时候,set get的速度是一个一个接着找 查找速度 O(n) FastThreadLocal 存放的容器 InternalThreadLocalMap是 private sta...原创 2020-01-17 15:18:12 · 286 阅读 · 0 评论 -
TimeWait状态为啥要等待 2MSL
如果不等待直接关闭的话,服务端之前发送的消息可能还没有完全到达客户端。关闭了则会导致发送失败 如果不等待,最后一次发送的SYN可能网络滞后,这样服务端的FIN包可能重新发送出现错误了 为啥要等两次MSL 一次为了等待ACK包到达,一次为了等待二次重新发送FIN包到达...原创 2020-06-20 11:03:43 · 504 阅读 · 0 评论 -
TCP为啥需要三次握手
校验双方的发送和接受能力 如果是两次的话,当客户端发送SYN命令,由于网络问题停滞了一会才到达服务端,这时客户端又重新发送了一遍;这样会导致双方建立了两个tcp连接原创 2020-06-20 10:51:14 · 110 阅读 · 0 评论 -
CLOSE_WAIT 状态的连接很多
代码问题:短连接模式,忘记 close 连接,就不会发出 FIN 包,导致连接处于 CLOSE_WAIT状态;或者程序在close 连接之前陷入死循环或者执行时间过长; backlog太大:backlog太大这里指的accept 的连接队列设置的太大,这个参数是在服务端创建ServerSocket作为参数传入的,默认为50,支持自定义,设置的太少容易出现连接reset或者拒绝,太大如果服务端处理连接不及时会放到accept队列等待太长时间。accept队列以及socket 连接建立流程如下图:上图所示,原创 2020-06-02 15:39:29 · 356 阅读 · 0 评论 -
TCP NoHttpResponseException
NoHttpResponseException发生的场景keep-alive可以 省去了很多不必要的握手/挥手操作,但由于连接长期保活,如果一直没有 http 请求的话,这条连接也就长期闲着了,会占用系统资源,有时反而会比复用连接带来更大的性能消耗。所以我们一般会为 keep-alive 设置一个 timeout, 这样如果连接在设置的 timeout 时间内一直处于空闲状态(未发生任何...原创 2019-12-18 19:38:16 · 349 阅读 · 0 评论 -
http 改造 https
1、进行nginx配置,原始的http方式不能丢弃。以免未改全2、https页面不能发起http请求 图片的请求一般是单独的请求,特别需要关注一下nginx配置日志,观察http请求是否完成,没有http请求之后再将 http请求强制转成https请求...原创 2022-04-15 21:25:50 · 966 阅读 · 0 评论 -
文件流操作的性能优化历程
WritableByteChannel writableByteChannel = Channels.newChannel(zipOut)fileChannel.transferTo(0, FILE_SIZE, writableByteChannel);既然直接缓冲区那么快,我们为什么不都用直接缓冲区呢?其实直接缓冲区有以下的缺点。直接缓冲区的缺点:1、不安全2、消耗更多,因为它不...原创 2022-04-08 20:12:55 · 375 阅读 · 0 评论 -
TCP UDP区别
1、TCP是一个面向连接、可靠、基于字节流 传输层协议2、UDP是一个无连接的、不可靠、基于数据包的 传输层协议面向连接:双端通信之前需要进行三次握手可靠性:字节流的传输是有序的,必须得到ACK;如果网络抖动或不佳,会进行重传基于字节流:TCP为了维护状态,则将一个个IP包变成了字节流...原创 2020-06-22 09:35:16 · 114 阅读 · 0 评论 -
TCP防SYN攻击
syncookies 参数主要有以下三个值: 0 值,表示关闭该功能; 1 值,表示仅当 SYN 半连接队列放不下时,再启用它; 2 值,表示无条件开启功能; 如果为了防止SYN攻击,只需要将值赋值为1 即可另外还有两点可以防止SYN攻击 增大半连接队列 不能只单纯增大 tcp_max_syn_backlog 的值,还需一同增大 somaxconn 和 backlog,也就是增大全连接队列。否则,只单纯增大 tcp_max_syn_backlog...原创 2020-06-19 17:42:57 · 358 阅读 · 0 评论 -
epoll LT模式和ET模式
LT模式 LT支持阻塞和非阻塞套 比较安全;ET只支持非阻塞式的,比较高效 系统默认LT模式 LT模式下,系统如果把事件拷贝给用户进程后,如果用户没有处理或者未处理完,则会不停的通知;ET模式下如果用户进程没有处理或者没有处理完,则下次调用不会再通知给用户进程;避免重复通知 LT模式下,read事件后进行读取操作,读多读少都没有问题,但是对于写事件,如果系统没有需要发送的,但是用户进程会一直被通知写事件;最好可以没有数据要发送的情况下可以从监听列表中删除,当有数据需要发送的时候再添加...原创 2020-06-11 12:04:49 · 242 阅读 · 0 评论 -
HttpClient 引发的线程太多,导致FullGc
CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(connectionManager) .setMaxConnTotal(400) .setMaxConnPerRoute(150) .evictExpiredConnections() .build();evictExpiredConnections 这个配置作用:设..原创 2020-05-21 11:03:15 · 924 阅读 · 0 评论