RSocket — бінарний протокол передачі даних через потік байтів такими протоколами, як: TCP, WebSockets, та Aeron, розроблений Netflix. RSocket створює протокол для використання реактивних потоків (Reactive Streams) між сервером та клієнтом (client-server), та server-server сполученням. RSocket протокол може споживатися різними імплементаціями бібліотек ряду мов програмування, що реалізують протокол RSocket.
Реалізація мовами програмування В документації RSocket представлені наступні мови програмування: Java Kotlin Go Rust C++ TypeScript JavaScript Swift Python
Java
Приклад Сервера:
RSocketServer.create(new PingHandler()) .payloadDecoder(PayloadDecoder.ZERO_COPY) .bind(TcpServerTransport.create(7878)) .block() .onClose();
Клієнт: Mono<RSocket> client = RSocketConnector.create() .payloadDecoder(PayloadDecoder.ZERO_COPY) .connect(TcpClientTransport.create(7878));
PingClient pingClient = new PingClient(client); Recorder recorder = pingClient.startTracker(Duration.ofSeconds(1)); int count = 1_000; pingClient .requestResponsePingPong(count, recorder) .doOnTerminate(() -> System.out.println("Sent " + count + " messages.")) .blockLast();
C++ Приклад Сервера // RSocket server accepting on TCP auto rs = RSocket::createServer(TcpConnectionAcceptor::create(FLAGS_port)); // global request handler auto handler = std::make_shared<HelloStreamRequestHandler>(); // start accepting connections rs->startAndPark([handler](auto r) { return handler; });
Приклад Клієнта: auto rsf = RSocket::createClient(TcpConnectionFactory::create(host, port)); auto s = std::make_shared<ExampleSubscriber>(5, 6); auto rs = rsf->connect().get(); rs->requestStream(Payload("Jane"), s);