rpc_dart_transports 0.1.0 copy "rpc_dart_transports: ^0.1.0" to clipboard
rpc_dart_transports: ^0.1.0 copied to clipboard

RPC Dart Transports library

RPC Dart Transports Logo

RPC Dart Transports

Библиотека транспортов для RPC Dart - предоставляет различные способы передачи RPC сообщений.

Поддерживаемые транспорты #

🌐 WebSocket Transport #

  • Двунаправленная связь через WebSocket
  • Поддержка мультиплексирования потоков
  • Автоматическое переподключение

🔄 Isolate Transport #

  • Связь между Dart изолятами
  • Высокая производительность для CPU-интенсивных задач
  • Изоляция ошибок

🚀 HTTP/2 Transport #

  • Современный HTTP/2 протокол
  • gRPC-совместимый формат сообщений
  • Мультиплексирование потоков
  • Поддержка TLS/SSL

HTTP/2 Transport #

HTTP/2 транспорт реализует gRPC-совместимый протокол поверх HTTP/2. Поддерживает как клиентские, так и серверные соединения.

Особенности #

  • Мультиплексирование: Множественные RPC вызовы через одно соединение
  • gRPC совместимость: Использует стандартные gRPC headers и frame формат
  • TLS поддержка: Защищенные HTTPS соединения
  • Stream управление: Автоматическое управление HTTP/2 streams

Использование #

Клиентское соединение

import 'package:rpc_dart_transports/rpc_dart_transports.dart';

// HTTP соединение
final transport = await Http2ClientTransport.connect(
  host: 'localhost',
  port: 8080,
);

// HTTPS соединение
final secureTransport = await Http2ClientTransport.secureConnect(
  host: 'api.example.com',
  port: 443,
);

// Создание RPC вызова
final streamId = transport.createStream();
final metadata = RpcMetadata.forClientRequest('MyService', 'MyMethod');

await transport.sendMetadata(streamId, metadata);
await transport.sendMessage(streamId, requestData);
await transport.finishSending(streamId);

// Обработка ответов
transport.getMessagesForStream(streamId).listen((message) {
  if (message.payload != null) {
    // Обработка данных ответа
    print('Received: ${utf8.decode(message.payload!)}');
  }
});

Серверное соединение

import 'package:http2/http2.dart' as http2;

// Создание HTTP/2 сервера (требует дополнительной настройки)
final serverConnection = http2.ServerTransportConnection.viaSocket(socket);
final transport = Http2ServerTransport.create(
  connection: serverConnection,
  logger: logger,
);

// Обработка входящих сообщений
transport.incomingMessages.listen((message) {
  if (message.isMetadataOnly) {
    // Обработка метаданных запроса
    print('Method: ${message.methodPath}');
  } else if (message.payload != null) {
    // Обработка данных запроса
    final requestData = message.payload!;
    
    // Отправка ответа
    final responseData = processRequest(requestData);
    transport.sendMessage(message.streamId, responseData);
    transport.finishSending(message.streamId);
  }
});

Примеры #

Смотрите example/http2_example.dart для полного примера использования.

Лицензия #

MIT