Этот вопрос проверяет понимание механизма межпроцессного взаимодействия в Unix-подобных системах, что важно для настройки высокопроизводительных серверов и контейнеризации.
Unix Socket — это специальный тип сокета, предназначенный для обмена данными между процессами, работающими на одной операционной системе. В отличие от TCP/IP сокетов, которые используют IP-адрес и порт, Unix сокет идентифицируется путем к файлу в файловой системе (например, /var/run/app.sock). Это делает его идеальным для локального взаимодействия, так как он работает быстрее и безопаснее, не требуя сетевых протоколов.
Процессы общаются через файл сокета, который создается одним из процессов (сервером). Другой процесс (клиент) подключается к этому файлу. Данные передаются напрямую через ядро ОС, минуя сетевой стек, что снижает задержки и нагрузку на CPU. Unix сокеты поддерживают два режима: потоковый (SOCK_STREAM, как TCP) и дейтаграммный (SOCK_DGRAM, как UDP).
import socket
import os
# Сервер
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
socket_path = '/tmp/my_socket.sock'
if os.path.exists(socket_path):
os.remove(socket_path)
server.bind(socket_path)
server.listen(1)
print('Сервер ожидает подключения...')
conn, addr = server.accept()
data = conn.recv(1024)
print(f'Получено: {data.decode()}')
conn.close()
# Клиент (в другом процессе)
client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
client.connect(socket_path)
client.send(b'Hello, Unix Socket!')
client.close()Unix Socket — это эффективный и безопасный способ локального межпроцессного взаимодействия. Его стоит применять, когда процессы работают на одной машине и требуется высокая производительность, например, в высоконагруженных веб-приложениях или при настройке связки веб-сервера с интерпретатором языка.