33.32.2 Соединения JSONRPC на основе процессов

Для удобства библиотека jsonrpc поставляется с встроенной реализацией транспорта jsonrpc-process-connection, которая может общаться с локальными подпроцессами (используя стандартный ввод и стандартный вывод); или с TCP-хостами (используя сокеты); или с любой другой удаленной конечной точкой, которую объект процесса Emacs может представлять (см. Процессы).

При использовании этого транспорта сообщения JSONRPC кодируются в виде простого текста и предшествуют некоторыми базовыми заголовками в стиле HTTP, такими как “Content-Length”.

Пример приложения, использующего эту схему транспорта поверх JSONRPC, см. в Language Server Protocol.

Помимо обязательных аргументов инициализации :request-dispatcher и :notification-dispatcher, пользователи класса jsonrpc-process-connection должны передать следующие аргументы инициализации в виде пар ключ-значение в make-instance:

:process

Значение должно быть живым объектом процесса или функцией без аргументов, возвращающей такой объект. Если передан объект процесса, ожидается, что объект содержит предварительно установленное соединение; в противном случае функция вызывается сразу после создания объекта.

:on-shutdown

Значение должно быть функцией с одним аргументом, объектом jsonrpc-process-connection. Функция вызывается после удаления базового объекта процесса (либо намеренно с помощью jsonrpc-shutdown, либо неожиданно, из-за какой-либо внешней причины).