Локальная связь - 127.0.0.1 против IPC
Я не совсем понимаю разницу между использованием сокета TCP с клиентом, подключающимся к адресу сервера 127.0.0.1, и другим IPC, таким как очереди сообщений. Поскольку оба они используются для связи внутри одного и того же хоста, почему вообще кто-то может пойти на сокетный подход, оставив очередь сообщений одной, как в этом случае, сокеты вызовут больше издержек по сравнению с очередями.
Различия, которые я вижу:- В случае сокетов мы можем видеть содержимое в wireshark, в очередях такого способа нет.
2 ответа
TCP и IPC оба подхода, которые мы используем для межпроцессного взаимодействия в распределенной архитектуре. Если процессы выполняются на одной машине, мы перейдем к очереди сообщений, но, конечно, не к TCP. Но предположим, что одно приложение работает в одном блоке, а другое - в другом, определенно, нам нужно использовать TCP для межпроцессного взаимодействия. Даже веб-сервисы также реализуют протокол TCP для связи с удаленным приложением.
Но все же нам нужна базовая связь по протоколу TCP на одной машине между двумя процессами, где необходима синхронизация. Например, если вы отправляете запрос на информацию об учетной записи клиента и ожидаете ответа, вам нужен такой подход. Но если вам просто нужно отправить информацию о клиенте на сервер, чтобы сохранить ее в таблице, и вам не нужен ответ с этого сервера, успешно ли сохранены ваши записи или нет, вы просто идете в очередь только для того, чтобы отбросить сообщение,
Смысл петлевого интерфейса / адреса не в том, что вы пишете программы для его конкретного использования.
Дело в том, что он позволяет вам общаться с сетевыми службами, работающими на локальном компьютере, так же, как вы общались бы с сетевыми службами, работающими на удаленном хосте. Например, если я разрабатываю веб-сайт, я могу запустить тестовый экземпляр его сервера на своем локальном компьютере, а затем указать свой браузер на http://127.0.0.1/
и вот оно. Мне не нужно изменять код моего браузера, чтобы сначала говорить через сокеты AF_UNIX или что-то еще. Точно так же, если я пишу приложение, которому нужна база данных, я мог бы начать с базы данных, работающей на том же компьютере, что и приложение, и разговаривать с ней по шлейфу, но потом, когда база данных станет больше, я могу переместить ее в выделенную хост и мне не нужно ничего менять, кроме конфигурации соединения.
Вы абсолютно правы в том, что локальный IPC имеет меньшие накладные расходы и должен использоваться, когда два процесса, которые должны взаимодействовать, всегда будут находиться на одном компьютере.