欢迎光临
我们一直在努力

Java高性能Socket编程实战

深度解析网络编程套接字:从底层原理到 Java 高性能实战

一、Socket 底层原理
  • 通信基础架构
    Socket 是操作系统提供的 TCP/IP 协议栈抽象接口,其核心包括:

    • 传输控制块(TCB):存储连接状态的四元组 $(源IP, 源端口, 目的IP, 目的端口)$
    • 缓冲区管理:内核维护发送/接收缓冲区,通过系统调用实现数据搬运
    • 事件驱动机制:通过 select/poll/epoll 监听 I/O 事件
  • TCP 连接生命周期
    $$ \\begin{aligned} &\\text{三次握手:} \\ &1.\\ \\text{Client} \\xrightarrow{\\text{SYN=1, seq=x}} \\text{Server} \\ &2.\\ \\text{Server} \\xrightarrow{\\text{SYN=1, ACK=1, seq=y, ack=x+1}} \\text{Client} \\ &3.\\ \\text{Client} \\xrightarrow{\\text{ACK=1, seq=x+1, ack=y+1}} \\text{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<SelectionKey> 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<SocketChannel>() {
    @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 算法
  • 监控指标

    指标监控工具优化目标
    QPS JMeter $\\geq 50k$
    延迟 Arthas $P99 < 10ms$
    线程池 JStack 拒绝策略调整

  • 总结:理解 Socket 内核机制是基础,结合 Java NIO/Netty 的异步非阻塞模型,配合参数调优与监控,可实现百万级并发的高性能网络服务。

    赞(0)
    未经允许不得转载:171主机测评 » Java高性能Socket编程实战
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址