什么是UDS
UDS 是一种本地进程间通信机制,通过文件系统路径作为访问端点,实现同一台机器上不同进程间的数据交换。
虽然表现为一个文件路径,但它不是普通文件。文件本身不存储数据,只是内核中 socket 资源的"门牌号"。
为什么需要UDS
通信机制对比
进程间通信方式:管道、共享内存、消息队列、信号量、Socket
线程间通信:共享内存(同一进程内的线程天然共享地址空间)
网络间通信:TCP/UDP Socket
UDS 是"本地版的 Socket",API 与网络 Socket 一致,但更高效。
Python示例
# server.py - 服务端
import socket
import os
SOCKET_PATH = '/tmp/my_uds.sock'
# 清理可能存在的旧socket文件
if os.path.exists(SOCKET_PATH):
os.unlink(SOCKET_PATH)
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server.bind(SOCKET_PATH)
server.listen(1)
print('Server listening...')
conn, _ = server.accept()
data = conn.recv(1024)
print(f'Received: {data.decode()}')
conn.send(b'Hello from server!')
conn.close()
server.close()
os.unlink(SOCKET_PATH)
# client.py - 客户端
import socket
client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
client.connect('/tmp/my_uds.sock')
client.send(b'Hello from client!')
print(client.recv(1024).decode())
client.close()
创建与销毁:服务端调用 bind() 时创建,服务端退出时应删除 socket 文件。
总结
UDS 是高效的本机进程通信方式,以文件路径为端点,实际数据在内核中流转。适合需要本地高性能通信的场景(如 Docker、MySQL 本地连接)。