Spec-Zone.ru › Git

api-simple-ipc

API Simple-IPC — это набор функций библиотеки с префиксом ipc_, а также базовый протокол связи, который позволяет процессу IPC-клиента отправлять сообщение запроса, специфичное для приложения, процессу IPC-сервера и получать сообщение ответа, специфичное для приложения.

Обмен данными происходит по именованной трубе в Windows и по сокету доменной Unix на других платформах. IPC-клиенты и IPC-серверы встречаются в заранее согласованном пути к файлу, специфичном для приложения (что выходит за рамки этого проекта), который локален для компьютерной системы.

Функции IPC-сервера в процессе приложения-сервера создают пул потоков для прослушивания подключений и получения сообщений запроса от нескольких одновременных IPC-клиентов. После получения эти сообщения передаются в обработку приложения-сервера с помощью обратных вызовов. Функции IPC-сервера затем поочередно передают ответы IPC-клиенту.

Функции IPC-клиента в процессе приложения-клиента подключаются к IPC-серверу, отправляют сообщение запроса и ожидают ответа. После получения ответа он возвращается вызывающему элементу.

Например, функция fsmonitor--daemon будет реализована как приложение-сервер на основе функций библиотеки IPC-сервера. Оно будет иметь потоки, следящие за событиями файловой системы, и пул потоков, ожидающих подключений клиентов. Клиенты, такие как git status, будут запрашивать список событий файловой системы с определенного момента, и сервер ответит списком измененных файлов и каталогов. Форматы запроса и ответа специфичны для приложения; функции IPC-клиента и IPC-сервера обрабатывают их как необработанные потоки байтов.

Сравнение с моделью дочернего процесса

Механизм Simple-IPC отличается от существующей модели sub-process.c (Documentation/technical/long-running-process-protocol.txt), используемой такими приложениями, как Git-LFS. В модели дочернего процесса в стиле LFS помощник запускается основным процессом, общение происходит через пару дескрипторов файлов, привязанных к stdin/stdout дочернего процесса, дочерний процесс обслуживает только текущий основной процесс, и дочерний процесс завершается при завершении основного процесса.

В модели Simple-IPC сервер представляет собой очень долго работающую службу. Он может обслуживать много клиентов одновременно и имеет частное сокетное или именованное соединение с каждой активной клиентом. Он может быть запущен (по требованию) текущим процессом клиента, или он может быть запущен предыдущим клиентом или операционной системой при загрузке. Процесс сервера не связан с терминалом и сохраняется после завершения клиентов. Клиенты не имеют доступа к stdin/stdout процесса сервера и поэтому должны обмениваться данными через сокеты или именованные трубы.

Запуск и завершение сервера

Как приложение-сервер, основанное на IPC-сервере, запускается, также не входит в сферу ответственности дизайна Simple-IPC и зависит от приложения, использующего его. Например, сервер может быть запущен или перезапущен во время плановых работ по обслуживанию, или он может быть запущен как системная служба во время загрузки системы, или может быть запущен по требованию командой Git в фоновом режиме по мере необходимости.

Аналогичным образом, завершение сервера зависит от приложения, использующего функции simple-ipc. Например, сервер может решить завершить работу при бездействии или только по явным запросам.

Протокол Simple-ipc

Протокол Simple-IPC состоит из одного сообщения запроса от клиента и необязательного сообщения ответа от сервера. Как сообщения клиента, так и сервера могут иметь неограниченную длину и завершаются пакетом флуша.

Функции pkt-line (gitprotocol-common[5]) используются для упрощения управления буфером во время генерации, передачи и приема сообщений. Пакет флуша используется для обозначения конца сообщения. Это позволяет отправителю поочередно генерировать и передавать сообщение. Это позволяет получателю поочередно получать сообщение частями и знать, когда он получил все сообщение.

Фактический байтовый формат сообщений запроса клиента и ответа сервера специфичен для приложения. Уровень IPC передает и получает их как необработанные буферы байтов без учета содержимого внутри. Задача вызывающего уровня приложения — понимать содержимое сообщений запроса и ответа.

Резюме

Концептуально, протокол Simple-IPC аналогичен запросу HTTP REST. Клиенты подключаются, делают специфичный для приложения и бессостоятельный запрос, получают специфичный для приложения ответ и отключаются. Это односторонний механизм запроса к серверу. Функции Simple-IPC скрывают детали сокетов, именованных труб и пула потоков и позволяют уровню приложения сосредоточиться на поставленной задаче.

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/api-simple-ipc

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API