Быстрый старт
Добро пожаловать в RPC Dart! Это руководство поможет вам быстро начать работу с RPC Dart в вашем проекте на Dart или Flutter.
Установка
Заголовок раздела «Установка»Добавьте RPC Dart в ваш проект, выполнив следующую команду:
dart pub add rpc_dart
flutter pub add rpc_dart
Для дополнительных типов транспортов (HTTP, WebSocket, Isolate) также добавьте:
dart pub add rpc_dart_transports
Ваш первый RPC сервис
Заголовок раздела «Ваш первый RPC сервис»Давайте создадим простой сервис калькулятора для демонстрации основных концепций RPC Dart.
1. Определите контракт
Заголовок раздела «1. Определите контракт»Сначала определите контракт сервиса с константами для имён сервиса и методов:
abstract interface class ICalculatorContract { static const name = 'Calculator'; static const methodAdd = 'add';}
2. Создайте модели запросов/ответов
Заголовок раздела «2. Создайте модели запросов/ответов»Определите модели данных для ваших RPC вызовов:
class AddRequest { final double a; final double b;
AddRequest(this.a, this.b);}
class AddResponse { final double result;
AddResponse(this.result);}
3. Реализуйте сервер (Responder)
Заголовок раздела «3. Реализуйте сервер (Responder)»Создайте responder, который обрабатывает входящие RPC вызовы:
import 'package:rpc_dart/rpc_dart.dart';
final class CalculatorResponder extends RpcResponderContract { CalculatorResponder() : super(ICalculatorContract.name);
@override void setup() { // Регистрируем обработчик унарного метода addUnaryMethod<AddRequest, AddResponse>( methodName: ICalculatorContract.methodAdd, handler: _add, ); }
Future<AddResponse> _add(AddRequest request, {RpcContext? context}) async { final result = request.a + request.b; return AddResponse(result); }}
4. Создайте клиент (Caller)
Заголовок раздела «4. Создайте клиент (Caller)»Реализуйте клиент, который вызывает RPC методы:
import 'package:rpc_dart/rpc_dart.dart';
final class CalculatorCaller extends RpcCallerContract { CalculatorCaller(RpcCallerEndpoint endpoint) : super(ICalculatorContract.name, endpoint);
Future<AddResponse> add(AddRequest request) { return callUnary<AddRequest, AddResponse>( methodName: ICalculatorContract.methodAdd, request: request, ); }}
5. Объедините всё вместе
Заголовок раздела «5. Объедините всё вместе»Теперь давайте создадим полный пример, который настраивает транспорт, эндпоинты и делает RPC вызов:
import 'package:rpc_dart/rpc_dart.dart';
void main() async { // Создаём пару InMemory транспортов final (clientTransport, serverTransport) = RpcInMemoryTransport.pair();
// Настраиваем responder endpoint final responder = RpcResponderEndpoint(transport: serverTransport); responder.registerServiceContract(CalculatorResponder()); responder.start();
// Настраиваем caller endpoint final caller = RpcCallerEndpoint(transport: clientTransport);
// Создаём клиент калькулятора final calculator = CalculatorCaller(caller);
// Делаем RPC вызов final result = await calculator.add(AddRequest(10, 5)); print('10 + 5 = ${result.result}'); // Вывод: 10 + 5 = 15.0
// Очистка ресурсов await caller.close(); await responder.close();}
Ключевые преимущества
Заголовок раздела «Ключевые преимущества»🚀 Производительность без копирования: С InMemory транспортом объекты передаются напрямую без накладных расходов на сериализацию.
🔒 Типобезопасность: Все RPC вызовы строго типизированы, ошибки обнаруживаются на этапе компиляции.
🧪 Лёгкое тестирование: InMemory транспорт делает модульное и интеграционное тестирование простым.
🔌 Независимость от транспорта: Переключайтесь между InMemory, HTTP, WebSocket без изменения бизнес-логики.
Следующие шаги
Заголовок раздела «Следующие шаги»- Изучите Основные концепции для понимания архитектуры RPC Dart
- Изучите различные типы транспортов для разных случаев использования
- Ознакомьтесь с типами RPC для потоковой и двунаправленной коммуникации
- Попробуйте архитектуру CORD для структурирования больших приложений
Нужна помощь?
Заголовок раздела «Нужна помощь?»- Ознакомьтесь с FAQ для ответов на частые вопросы
- Просмотрите примеры на GitHub
- Создайте issue на GitHub, если нашли баги или у вас есть вопросы