Ответ
Remote Procedure Call (RPC) — это протокол, который позволяет программе вызывать процедуру (функцию или метод) на другом компьютере в сети так, как будто она является локальной. RPC скрывает сложность сетевого взаимодействия, позволяя разработчикам сосредоточиться на бизнес-логике.
Как это работает (упрощенно):
- Клиент вызывает локальную функцию-заглушку (client stub).
- Заглушка упаковывает (сериализует) параметры вызова в сообщение и отправляет его по сети на сервер.
- Сервер получает сообщение, распаковывает его и передаёт параметры реальной процедуре.
- Процедура на сервере выполняется и возвращает результат.
- Сервер упаковывает результат и отправляет его обратно клиенту.
- Клиентская заглушка получает ответ, распаковывает его и возвращает результат вызывающей программе.
Пример с xmlrpc
в Python:
Это простая реализация RPC, использующая XML для передачи данных.
Сервер:
from xmlrpc.server import SimpleXMLRPCServer
# Функция, которая будет вызываться удаленно
def add(x, y):
return x + y
# Создаем сервер на localhost, порт 8000
server = SimpleXMLRPCServer(("localhost", 8000))
print("Listening on port 8000...")
# Регистрируем функцию под именем 'add'
server.register_function(add, "add")
# Запускаем сервер
server.serve_forever()
Клиент:
import xmlrpc.client
# Подключаемся к удаленному серверу
with xmlrpc.client.ServerProxy("http://localhost:8000/") as proxy:
# Вызываем удаленную функцию 'add' как локальную
result = proxy.add(5, 7)
print(f"5 + 7 = {result}") # Вывод: 5 + 7 = 12
Современные и более производительные реализации RPC включают gRPC (от Google) и Apache Thrift, которые часто используются в микросервисных архитектурах.