2017-02-15 12 views
0
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 + CompletableFuture или RxJava? Я искал, но безуспешно.Undertow + CompletedFuture/RxJava

+0

какие функции вы пытаетесь достичь именно? – yosriz

+0

Я хочу обрабатывать запросы, которые будут запрашивать базы данных, поэтому до ответа базы данных я хочу обрабатывать другой запрос – Romper

+0

, пожалуйста, посмотрите мой ответ здесь, вам нужно понять, как создавать наблюдаемые из асинхронных обратных вызовов: http://stackoverflow.com/ вопросы/42225722/rxjava-data-from-db-with-onscreen-list/42226534 # 42226534 – yosriz

ответ

1

Вот прибойный привет мир с RxJava 2:

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"); 
    }); 
} 

Это лишь простейший пример, то привет мир Undertow + RxJava, который не принимает во внимание управление потоками среди других вещей. Я использовал Observable.create() для обертывания HttpHandler и его обратного вызова к Observable. Этот Observable представляет поток входящего запроса, который вы будете потреблять (часть exchangeObservable.subscribe()) для обработки запросов.

RxJava изменится только грамматику от обратного вызова для наблюдаемой модели, а также предлагает хороший набор операторов для борьбы с ними: http://reactivex.io/documentation/operators.html

+0

Спасибо. Что вы понимаете под управлением потоков? У вас есть несколько примеров? – Romper

+1

Вы можете прочитать по этому вопросу http://reactivex.io/documentation/scheduler.html и ссылки, приведенные внизу. По умолчанию Observable не будет создавать потоки или использовать какой-либо механизм параллелизма. Прежде чем перейти на RxJava Schedulers, посмотрите, как работает работа. Обычно веб-сервер обрабатывает управление потоками. –