У меня следующий сервер RSocket
@Log4j2
public class NativeRsocketServerFnF {
public static void main(String[] args) {
RSocketFactory.receive()
.frameDecoder(ZERO_COPY)
.errorConsumer(log::error)
.acceptor((setup, clientHandleRsocket) -> {
return Mono.just(
new AbstractRSocket() {
@Override
public Mono<Void> fireAndForget(Payload payload) {
CharSequence message = payload.data().readCharSequence(payload.data().readableBytes(), forName("UTF-8"));
payload.release();
log.info("> from client: {}", message);
return Mono.empty();
}
}
);
})
.transport(TcpServerTransport.create(8000))
.start()
.block()
.onClose()
.block();
}
}
и следующий клиент RSocket
@Log4j2
public class NativeRsocketClientFnF {
public static void main(String[] args) {
RSocketFactory.connect()
.frameDecoder(ZERO_COPY)
.errorConsumer(log::error)
.transport(TcpClientTransport.create(8000))
.start()
.flatMap(rSocket -> rSocket.fireAndForget(DefaultPayload.create("ping")))
.block();
}
}
Как видите, я пытаюсь отправить "ping" как данные полезной нагрузки от клиента на сервер.
Когда я запускаю сервер и запускаю клиент в первый раз, я вижу > from client: ping
Если я перезапущу клиент снова, я не увижу никаких сообщений на сервере. Точка останова даже не попадает на сервер
Насколько я понимаю, Fire and Forget просто отправляет данные и не беспокоится о том, чтобы ждать и видеть, успешно ли сервер обрабатывает данные, но в моем случае сам сервер не получает данные при последующих запусках клиента (так же хорошо, как новые клиенты)
Что-то мне не хватает?
Я использую версию 1.0.0-RC5
из rsocket-core
& rsocket-transport-netty
ОС: Ubuntu 16.04