Java高性能Socket编程实战
深度解析网络编程套接字:从底层原理到 Java 高性能实战
一、Socket 底层原理
-
通信基础架构
Socket 是操作系统提供的 TCP/IP 协议栈抽象接口,其核心包括:- 传输控制块(TCB):存储连接状态的四元组 $(源IP, 源端口, 目的IP, 目的端口)$
- 缓冲区管理:内核维护发送/接收缓冲区,通过系统调用实现数据搬运
- 事件驱动机制:通过
select/poll/epoll监听 I/O 事件
-
TCP 连接生命周期
$$ egin{aligned} & ext{三次握手:} &1. ext{Client} xrightarrow{ ext{SYN=1, seq=x}} ext{Server} &2. ext{Server} xrightarrow{ ext{SYN=1, ACK=1, seq=y, ack=x+1}} ext{Client} &3. ext{Client} xrightarrow{ ext{ACK=1, seq=x+1, ack=y+1}} ext{Server} end{aligned} $$ 四次挥手过程同理,需处理TIME_WAIT状态优化。
二、Java 高性能实战
- 阻塞 I/O 模型(传统模式)
// 服务端示例
try (ServerSocket server = new ServerSocket(8080)) {
while (true) {
Socket client = server.accept(); // 阻塞等待连接
new Thread(() -> handleRequest(client)).start();
}
}
http://my.tv.sohu.com/us/441086388/698466658.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjY1OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466664.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjY2NC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466491.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjQ5MS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466578.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjU3OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466748.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njc0OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467007.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzAwNy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466813.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjgxMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466762.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njc2Mi5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466825.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjgyNS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466773.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njc3My5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466926.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjkyNi5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466849.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg0OS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466856.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg1Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466946.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njk0Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466869.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg2OS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466953.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njk1My5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467077.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzA3Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467119.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzExOS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466885.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg4NS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466978.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njk3OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466896.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg5Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467137.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzEzNy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467143.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE0My5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467408.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQwOC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467412.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQxMi5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467154.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE1NC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467333.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzMzMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467423.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQyMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467168.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE2OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467350.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzM1MC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467246.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzI0Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467176.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE3Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467180.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE4MC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467258.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzI1OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467449.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ0OS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467454.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ1NC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467376.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzM3Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467275.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzI3NS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467463.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ2My5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467503.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzUwMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467294.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzI5NC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467514.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzUxNC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467491.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ5MS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467521.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzUyMS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467499.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ5OS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467713.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzcxMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467531.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzUzMS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467621.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzYyMS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467540.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzU0MC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467824.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzgyNC5zaHRtbA==.html
缺陷:线程数 $propto$ 并发连接数,上下文切换成本高。
- NIO 多路复用优化
Selector selector = Selector.open();
ServerSocketChannel channel = ServerSocketChannel.open();
channel.bind(new InetSocketAddress(8080));
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
selector.select(); // 单线程监听多通道事件
Set keys = selector.selectedKeys();
for (SelectionKey key : keys) {
if (key.isAcceptable()) {
// 处理新连接
} else if (key.isReadable()) {
// 处理数据读取
}
}
}
优势:
- 单线程处理 $geq 10^4$ 连接(C10K 问题解决方案)
- 基于事件驱动的
Reactor模式
- Netty 框架最佳实践
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer() {
@Override
protected void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new EchoServerHandler());
}
});
ChannelFuture f = b.bind(8080).sync();
f.channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
http://my.tv.sohu.com/us/441086388/698466658.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjY1OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466664.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjY2NC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466491.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjQ5MS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466578.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjU3OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466748.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njc0OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467007.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzAwNy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466813.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjgxMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466762.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njc2Mi5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466825.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjgyNS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466773.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njc3My5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466926.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NjkyNi5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466849.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg0OS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466856.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg1Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466946.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njk0Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466869.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg2OS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466953.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njk1My5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467077.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzA3Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467119.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzExOS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466885.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg4NS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466978.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njk3OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698466896.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2Njg5Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467137.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzEzNy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467143.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE0My5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467408.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQwOC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467412.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQxMi5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467154.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE1NC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467333.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzMzMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467423.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQyMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467168.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE2OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467350.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzM1MC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467246.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzI0Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467176.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE3Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467180.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzE4MC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467258.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzI1OC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467449.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ0OS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467454.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ1NC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467376.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzM3Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467275.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzI3NS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467463.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ2My5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467503.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzUwMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467294.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzI5NC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467514.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzUxNC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467491.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ5MS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467521.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzUyMS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467499.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzQ5OS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467713.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzcxMy5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467531.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzUzMS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467621.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzYyMS5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467540.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzU0MC5zaHRtbA==.html
http://my.tv.sohu.com/us/441086388/698467824.shtml
https://tv.sohu.com/v/dXMvNDQxMDg2Mzg4LzY5ODQ2NzgyNC5zaHRtbA==.html
高性能设计:
- 零拷贝:通过
FileRegion减少内核态拷贝 - 内存池:重用
ByteBuf避免频繁 GC - 无锁化设计:
EventLoop线程绑定 Channel
三、性能调优策略
-
参数优化
- 调整 TCP 缓冲区大小:
socket.setReceiveBufferSize(128 * 1024) - 开启
SO_REUSEPORT支持端口复用 - 设置
TCP_NODELAY禁用 Nagle 算法
- 调整 TCP 缓冲区大小:
-
监控指标
指标 监控工具 优化目标 QPS JMeter $geq 50k$ 延迟 Arthas $P99 < 10ms$ 线程池 JStack 拒绝策略调整
总结:理解 Socket 内核机制是基础,结合 Java NIO/Netty 的异步非阻塞模型,配合参数调优与监控,可实现百万级并发的高性能网络服务。











