.. | ||
jsonrpc.go | ||
jsonrpc_test.go | ||
README.md |
jsonrpc
Главная идея RPC (remote procedure call) заключается в том, чтобы вызов удаленных процедур (например, работающих на другой машине) был очень похожим на вызов функций внутри программы. Вся механика удаленных вызовов прячется от пользователя.
Для чего это нужно? Например, для облегчения организации распределенных вычислений.
Реализация RPC включает в себя два компонента: сетевой протокол для обмена в режиме клиент-сервер и язык сериализации объектов.
В данной задаче нужно реализовать RPC, используя http в качестве транспорта и json для сериализации запросов/ответов.
Клиентская часть
Call(ctx context.Context, endpoint string, method string, req, rsp interface{}) error
Call
делает http запрос на заданную ручку (endpoint+method), передавая в body сериализованный запрос и
возвращает десериализованный ответ через аргумент.
Логической частью запроса занимается сервер.
Для пользователя работа с Call
выглядит практически также, как работа с обычной функцией:
method(req, &resp) error
Серверная часть
MakeHandler(service interface{}) http.Handler
RPC сервис - это структура, на которой определено несколько RPC методов. RPC метод - это функция с сигнатурой вида:
Method(ctx context.Context, req *Request) (*Response, error)
MakeHandler
создаёт http.Handler,
предоставляющий http ручки для всех RPC методов сервиса (http endpoint = method name).