同一台机器上的进程通信,Unix 域套接字比 TCP 回环好在哪?这篇在 JDK 21 上用同样的回显程序实测:延迟、吞吐,以及容易踩的文件残留与路径长度限制(Selector 与 TCP 的基础见前面的篇目)。
服务端绑定到 s.sock;绑定之后这个路径在文件系统里存在吗:true,是普通文件吗:false,是目录吗:false,POSIX 权限:rwxr-xr-x 客户端发 hello,回显收到:hello;c.getLocalAddress() = ,c.getRemoteAddress() = …/s.sock 服务端通道关闭之后,socket 文件还在吗:true(不会自动删除) 文件还在时再次 bind 同一个路径 → BindException: Address already in use 删除文件之后再 bind:成功 很长的路径:地址对象创建成功 路径超过 100 多个字符时:SocketException: Unix domain path too long
1 字节来回(ping-pong)10 万次的平均往返:Unix 域套接字 4.9 µs,TCP 回环(TCP_NODELAY)20.1 µs 双向大量传输 2 GB(客户端发、服务端原样回显、客户端同时收):Unix 域套接字 1105 MB/s,TCP 回环 2105 MB/s