|
22 | 22 | import io.rsocket.RSocket;
|
23 | 23 | import io.rsocket.RSocketFactory;
|
24 | 24 | import io.rsocket.SocketAcceptor;
|
25 |
| -import io.rsocket.transport.netty.client.TcpClientTransport; |
26 |
| -import io.rsocket.transport.netty.server.TcpServerTransport; |
27 |
| -import io.rsocket.util.DefaultPayload; |
| 25 | +import io.rsocket.frame.decoder.PayloadDecoder; |
| 26 | +import io.rsocket.transport.local.LocalClientTransport; |
| 27 | +import io.rsocket.transport.local.LocalServerTransport; |
| 28 | +import io.rsocket.util.ByteBufPayload; |
28 | 29 | import java.time.Duration;
|
29 | 30 | import org.reactivestreams.Publisher;
|
30 | 31 | import reactor.core.publisher.Flux;
|
31 | 32 | import reactor.core.publisher.Mono;
|
| 33 | +import reactor.core.scheduler.Schedulers; |
32 | 34 |
|
33 | 35 | public final class ChannelEchoClient {
|
| 36 | + static final Payload payload1 = ByteBufPayload.create("Hello "); |
34 | 37 |
|
35 | 38 | public static void main(String[] args) {
|
36 | 39 | RSocketFactory.receive()
|
| 40 | + .frameDecoder(PayloadDecoder.ZERO_COPY) |
37 | 41 | .acceptor(new SocketAcceptorImpl())
|
38 |
| - .transport(TcpServerTransport.create("localhost", 7000)) |
| 42 | + .transport(LocalServerTransport.create("localhost")) |
39 | 43 | .start()
|
40 | 44 | .subscribe();
|
41 | 45 |
|
42 | 46 | RSocket socket =
|
43 | 47 | RSocketFactory.connect()
|
44 |
| - .transport(TcpClientTransport.create("localhost", 7000)) |
| 48 | + .keepAliveAckTimeout(Duration.ofMinutes(10)) |
| 49 | + .frameDecoder(PayloadDecoder.ZERO_COPY) |
| 50 | + .transport(LocalClientTransport.create("localhost")) |
45 | 51 | .start()
|
46 | 52 | .block();
|
47 | 53 |
|
48 |
| - socket |
49 |
| - .requestChannel( |
50 |
| - Flux.interval(Duration.ofMillis(1000)).map(i -> DefaultPayload.create("Hello"))) |
51 |
| - .map(Payload::getDataUtf8) |
52 |
| - .doOnNext(System.out::println) |
53 |
| - .take(10) |
54 |
| - .doFinally(signalType -> socket.dispose()) |
55 |
| - .then() |
56 |
| - .block(); |
| 54 | + Flux.range(0, 100000000) |
| 55 | + .concatMap(i -> socket.fireAndForget(payload1.retain())) |
| 56 | + // .doOnNext(p -> { |
| 57 | + //// System.out.println(p.getDataUtf8()); |
| 58 | + // p.release(); |
| 59 | + // }) |
| 60 | + .blockLast(); |
57 | 61 | }
|
58 | 62 |
|
59 | 63 | private static class SocketAcceptorImpl implements SocketAcceptor {
|
60 | 64 | @Override
|
61 | 65 | public Mono<RSocket> accept(ConnectionSetupPayload setupPayload, RSocket reactiveSocket) {
|
62 | 66 | return Mono.just(
|
63 | 67 | new AbstractRSocket() {
|
| 68 | + |
| 69 | + @Override |
| 70 | + public Mono<Void> fireAndForget(Payload payload) { |
| 71 | + // System.out.println(payload.getDataUtf8()); |
| 72 | + payload.release(); |
| 73 | + return Mono.empty(); |
| 74 | + } |
| 75 | + |
| 76 | + @Override |
| 77 | + public Mono<Payload> requestResponse(Payload payload) { |
| 78 | + return Mono.just(payload); |
| 79 | + } |
| 80 | + |
64 | 81 | @Override
|
65 | 82 | public Flux<Payload> requestChannel(Publisher<Payload> payloads) {
|
66 |
| - return Flux.from(payloads) |
67 |
| - .map(Payload::getDataUtf8) |
68 |
| - .map(s -> "Echo: " + s) |
69 |
| - .map(DefaultPayload::create); |
| 83 | + return Flux.from(payloads).subscribeOn(Schedulers.single()); |
70 | 84 | }
|
71 | 85 | });
|
72 | 86 | }
|
|
0 commit comments