Вопрос проверяет понимание Unix-сокетов как механизма межпроцессного взаимодействия на одной машине и их отличий от TCP-сокетов.
Unix-сокеты (или IPC-сокеты) — это механизм межпроцессного взаимодействия (IPC), который позволяет процессам обмениваться данными в пределах одной операционной системы. В отличие от TCP-сокетов, которые используют IP-адрес и порт для связи через сеть, Unix-сокеты используют файл в файловой системе (например, /var/run/docker.sock) или абстрактное имя. Это делает их более быстрыми и безопасными для локального общения, так как данные не проходят через сетевой стек и не подвержены сетевым атакам.
/var/run/docker.sock) для взаимодействия между клиентом и демоном Docker.import socket
import os
# Путь к сокету
socket_path = '/tmp/my_socket.sock'
# Удаляем старый сокет, если он существует
try:
os.unlink(socket_path)
except OSError:
pass
# Создаем Unix-сокет
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server.bind(socket_path)
server.listen(1)
print('Сервер ожидает подключения...')
conn, addr = server.accept()
print('Подключен клиент')
data = conn.recv(1024)
print(f'Получено: {data.decode()}')
conn.sendall(b'Привет от сервера!')
conn.close()
server.close()
os.unlink(socket_path)Unix-сокеты — это эффективный и безопасный способ организации IPC на одной машине. Их стоит применять, когда требуется минимальная задержка и высокая пропускная способность при локальном взаимодействии процессов, особенно в высоконагруженных системах и контейнерных средах.