暗流 + CompletableFuture/RxJava

Undertow + CompletableFuture/RxJava

public class HelloWorldServer {

    public static void main(final String[] args) {
        Undertow server = Undertow.builder()
                .addHttpListener(8080, "localhost")
                .setHandler(new HttpHandler() {
                    @Override
                    public void handleRequest(final HttpServerExchange exchange) throws Exception {
                        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                        exchange.getResponseSender().send("Hello World");
                    }
                }).build();
        server.start();
    }
}

是使用undertow的hello world应用。 有人可以提供 Undertow + CompletableFuture 或 RxJava 的示例吗?我已经搜索过但没有成功。

这里是 RxJava 2 的 undertow hello world:

public static void main(final String[] args) {
    Observable<HttpServerExchange> exchangeObservable = Observable.create(observableEmitter -> {
        Undertow server = Undertow.builder()
                .addHttpListener(8080, "localhost")
                .setHandler(new HttpHandler() {
                    @Override
                    public void handleRequest(final HttpServerExchange exchange) throws Exception {
                        observableEmitter.onNext(exchange);
                    }
                }).build();
        server.start();
        observableEmitter.setCancellable(() -> server.stop());
    });

    exchangeObservable.subscribe(exchange -> {
        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
        exchange.getResponseSender().send("Hello World");
    });
}

这只是一个简单的例子,hello world Undertow + RxJava,它没有考虑线程管理等等。我使用 Observable.create() 来包装 HttpHandler 并且它是对 Observable 的回调。此 Observable 表示您将使用(exchangeObservable.subscribe() 部分)来处理请求的传入请求流。

RxJava 只会将语法从回调更改为可观察模式,并提供一组很好的运算符来处理它们:http://reactivex.io/documentation/operators.html