From dbc5f8526d611e938a38e40fc8eb143d0d3d3c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=94=BE=E6=B5=AA=E5=BD=A2=E9=AA=B8?= Date: Mon, 9 Aug 2021 05:38:19 -0700 Subject: [PATCH] Add docs for `Tcp|HttpServer`s with same configuration but different bind addresses (#1760) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Related to #1751 Co-authored-by: Simon Baslé Co-authored-by: Violeta Georgieva --- docs/asciidoc/http-server.adoc | 15 +++++++ docs/asciidoc/tcp-server.adoc | 15 +++++++ .../address/MultiAddressApplication.java | 38 ++++++++++++++++++ .../address/MultiAddressApplication.java | 39 +++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/http/server/address/MultiAddressApplication.java create mode 100644 reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/tcp/server/address/MultiAddressApplication.java diff --git a/docs/asciidoc/http-server.adoc b/docs/asciidoc/http-server.adoc index 852ae245f5..6bbf06af40 100644 --- a/docs/asciidoc/http-server.adoc +++ b/docs/asciidoc/http-server.adoc @@ -47,6 +47,21 @@ include::{examplesdir}/address/Application.java[lines=18..33] <2> Configures the `HTTP` server port ==== +To serve on multiple addresses, after having configured the `HttpServer` you can bind it multiple times to obtain separate `DisposableServer`s. +All created servers will share resources such as `LoopResources` because they use the same configuration instance under the hood. + +==== +[source,java,indent=0] +.{examplesdir}/address/MultiAddressApplication.java +---- +include::{examplesdir}/address/MultiAddressApplication.java[lines=18..41] +---- +<1> Configures the first `HTTP` server host +<2> Configures the first `HTTP` server port +<3> Configures the second `HTTP` server host +<4> Configures the second `HTTP` server port +==== + == Eager Initialization By default, the initialization of the `HttpServer` resources happens on demand. This means that the `bind diff --git a/docs/asciidoc/tcp-server.adoc b/docs/asciidoc/tcp-server.adoc index bd731557ec..0b93449ee9 100644 --- a/docs/asciidoc/tcp-server.adoc +++ b/docs/asciidoc/tcp-server.adoc @@ -48,6 +48,21 @@ include::{examplesdir}/address/Application.java[lines=18..33] <2> Configures the `TCP` server port ==== +To serve on multiple addresses, after having configured the `TcpServer` you can bind it multiple times to obtain separate `DisposableServer`s. +All created servers will share resources such as `LoopResources` because they use the same configuration instance under the hood. + +==== +[source,java,indent=0] +.{examplesdir}/address/MultiAddressApplication.java +---- +include::{examplesdir}/address/MultiAddressApplication.java[lines=18..41] +---- +<1> Configures the first `TCP` server host +<2> Configures the first `TCP` server port +<3> Configures the second `TCP` server host +<4> Configures the second `TCP` server port +==== + == Eager Initialization By default, the initialization of the `TcpServer` resources happens on demand. This means that the `bind diff --git a/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/http/server/address/MultiAddressApplication.java b/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/http/server/address/MultiAddressApplication.java new file mode 100644 index 0000000000..113df9656b --- /dev/null +++ b/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/http/server/address/MultiAddressApplication.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 VMware, Inc. or its affiliates, All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package reactor.netty.examples.documentation.http.server.address; + +import reactor.core.publisher.Mono; +import reactor.netty.DisposableServer; +import reactor.netty.http.server.HttpServer; + +public class MultiAddressApplication { + public static void main(String[] args) { + HttpServer httpServer = HttpServer.create(); + DisposableServer server1 = httpServer + .host("localhost") //<1> + .port(8080) //<2> + .bindNow(); + + DisposableServer server2 = httpServer + .host("0.0.0.0") //<3> + .port(8081) //<4> + .bindNow(); + + Mono.when(server1.onDispose(), server2.onDispose()) + .block(); + } +} diff --git a/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/tcp/server/address/MultiAddressApplication.java b/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/tcp/server/address/MultiAddressApplication.java new file mode 100644 index 0000000000..45519741b0 --- /dev/null +++ b/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/tcp/server/address/MultiAddressApplication.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 VMware, Inc. or its affiliates, All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package reactor.netty.examples.documentation.tcp.server.address; + +import reactor.core.publisher.Mono; +import reactor.netty.DisposableServer; +import reactor.netty.tcp.TcpServer; + +public class MultiAddressApplication { + + public static void main(String[] args) { + TcpServer tcpServer = TcpServer.create(); + DisposableServer server1 = tcpServer + .host("localhost") //<1> + .port(8080) //<2> + .bindNow(); + + DisposableServer server2 = tcpServer + .host("0.0.0.0") //<3> + .port(8081) //<4> + .bindNow(); + + Mono.when(server1.onDispose(), server2.onDispose()) + .block(); + } +}