jsonrpc: add readme
This commit is contained in:
parent
31558fe3b4
commit
5dbddc0ff6
1 changed files with 38 additions and 1 deletions
|
@ -1,2 +1,39 @@
|
|||
# jsonrpc
|
||||
## jsonrpc
|
||||
|
||||
Главная идея [RPC](https://en.wikipedia.org/wiki/Remote_procedure_call) (remove 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).
|
Loading…
Reference in a new issue