Пример для объяснения unix-доменного сокета - AF_INET vs AF_UNIX
пока я читал, что означает AF_INET
, я узнал, что есть еще одно семейство под названием UNIX domain socket
. Вот ссылка wiki Я читал об этом.
Я не понимаю, что это значит:
Сокеты домена Unix используют файловую систему в качестве пространства имен имен. На них ссылаются процессы как inodes в файловой системе. Эта позволяет двум процессам открывать один и тот же сокет для связи. Однако связь происходит полностью внутри операционной системы ядра.
Если я хочу сделать SSH or FTP
, в какой семье я использую AF_INET or AF_UNIX
. Я немного запутался здесь.
Ответы
Ответ 1
Если вы хотите общаться с удаленным хостом, вам, вероятно, понадобится сокет INET
.
Разница заключается в том, что сокет INET
привязан к кортежу IP-адреса, а сокет UNIX
"привязан" к специальному файлу вашей файловой системы. Как правило, только процессы, запущенные на одном компьютере, могут взаимодействовать через последние.
Итак, зачем использовать сокет UNIX
? Точно по причине выше: связь между процессами на одном и том же хосте, являющаяся легкой альтернативой сокету INET
через loopback.
Фактически, сокеты INET
размещаются в верхней части полного стека TCP/IP, с алгоритмами перегрузки трафика, отсрочками и т.п. для обработки. Сокет UNIX
не должен решать какие-либо из этих проблем, так как все предназначено для локального использования на машине, поэтому его код намного проще и связь быстрее. Конечно, вы, вероятно, заметите разницу только при большой нагрузке, например. при обратном проксировании сервера приложений (Node.js, Tornado...) за Nginx и т.д.
Ответ 2
Сокеты AF_UNUX обеспечивают отличную межпроцессную связь. Откройте пару сокетов socket socket (..) "и привяжите к временному имени файла. Запись в одну из пары поступает в другую. Ядро маршрутизирует сообщения без накладных расходов на протокол или файловую систему. Можно использовать блокировку ввода/вывода или выбрать (...), чтобы синхронизировать потоки и процессы в режиме FIFO. Мне нравится неблокировать режим select и datagram (может получить длину), но вы можете выбрать свой собственный. Обязательно удалите временный файл при выходе (он будет иметь нулевые байты но все равно будет отображаться в каталоге файловой системы)
JLP