Spec-Zone.ru › Elisp

Отложенные запросы JSONRPC

Во многих ситуациях RPC, синхронизация между двумя конечными точками обмена данными зависит от правильного проектирования приложения RPC: когда синхронизация необходима, следует использовать запросы (которые блокируют выполнение); когда она не требуется, достаточно уведомлений. Однако, когда Emacs выступает в качестве одной из этих конечных точек, асинхронные события (например, связанные с таймером или процессами) могут быть инициированы, пока неясен статус удалённой конечной точки. Кроме того, реагирование на эти события может иногда требовать синхронизации, в зависимости от конкретной природы события.

Ключевой аргумент :deferred к jsonrpc-request и jsonrpc-async-request предназначен для того, чтобы позволить вызывающей стороне указать, что конкретный запрос требует синхронизации и его фактическая отправка может быть отложена на будущее до удовлетворения определённого условия. Указание :deferred для запроса не означает, что он будет отложен, только что он может быть отложен. Если запрос не отправляется немедленно, jsonrpc будет предпринимать новые попытки отправить его в определённые ключевые моменты во время связи, например, при получении или отправке других сообщений на конечную точку.

Перед любой попыткой отправить запрос проверяются условия, специфичные для приложения. Поскольку библиотека jsonrpc не может знать, каковы эти условия, программа может использовать универсальную функцию jsonrpc-connection-ready-p (см. Универсальные функции), чтобы их определить. Метод по умолчанию для этой функции возвращает t, но вы можете добавить переопределяющие методы, которые возвращают nil в некоторых ситуациях, основываясь на аргументах, переданных ей, которые являются объектом jsonrpc-connection (см. Обзор JSONRPC) и любым значением, которое вы передали как ключевой аргумент :deferred.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/JSONRPC-deferred-requests.html

Spec-Zone.ru

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