Reactor Netty参考指南目录
原文地址
Reactor Netty
提供了易于使用和配置的TcpServer
。它隐藏了创建TCP
服务器所需的大部分Netty
的功能,并增加了Reactive Streams
背压。
3.1.启动和停止
如果要启动一个TCP
服务器,您必须创建并且配置一个TcpServer
实例对象。默认情况下,host
是配置为任何本地地址,当执行bind
操作的时候系统会选择一个临时端口。下面是创建并且配置一个TcpServer
实例的例子:
https://github.com/reactor/reactor-netty/blob/master/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/tcp/server/create/Application.java
import reactor.netty.DisposableServer; import reactor.netty.tcp.TcpServer; public class Application { public static void main(String[] args) { DisposableServer server = TcpServer.create() //<1> .bindNow(); //<2> server.onDispose() .block(); } }
<1> 创建一个
TcpServer
实例用来做配置操作。<2> 使用阻塞等待的方式启动服务器,直到初始化完成。
返回的DisposableServer
提供了简单的服务器API,包括disposeNow()
,这个方法可以以阻塞等待的方式来关闭服务器。
3.1.1.Host和Port
想要设置特定host
和port
,您可以用下面的方式来配置TCP
服务器:
https://github.com/reactor/reactor-netty/blob/master/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/tcp/server/address/Application.java
import reactor.netty.DisposableServer; import reactor.netty.tcp.TcpServer; public class Application { public static void main(String[] args) { DisposableServer server = TcpServer.create() .host("localhost") //<1> .port(8080) //<2> .bindNow(); server.onDispose() .block(); } }
<1> 配置
TCP
服务器的host<2> 配置
TCP
服务器的port
3.2.预先初始化
默认情况下,TcpServer
初始化资源的操作在需要使用的时候才进行。这意味着初始化加载的时候bind operation
会占用额外的时间:
- 事件循环组
- native传输库(当使用了native传输的时候)
- 用于安全性的native库(使用了
OpenSsl
的时候)
当您需要预加载这些资源的时候,您可以按照以下方式来配置TcpServer
:
https://github.com/reactor/reactor-netty/blob/master/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/tcp/server/warmup/Application.java
import reactor.netty.DisposableServer; import reactor.netty.tcp.TcpServer; public class Application { public static void main(String[] args) { TcpServer tcpServer = TcpServer.create() .handle((inbound, outbound) -> inbound.receive().then()); tcpServer.warmup() //<1> .block(); DisposableServer server = tcpServer.bindNow(); server.onDispose() .block(); } }
<1> 初始化和加载事件循环组,native传输库和用于安全性的native库
3.3.写出数据
如果要发送数据到一个已连接的客户端,您必须添加一个I/O处理器。这个I/O处理器可以通过NettyOutbound
来写出数据。下面是添加一个I/O处理器的例子:
https://github.com/reactor/reactor-netty/blob/master/reactor-netty-examples/src/main/java/reactor/netty/examples/documentation/tcp/server/send/Application.java
import reactor.core.publisher.Mono; import reactor.netty.DisposableServer; import reactor.netty.tcp.TcpServer; public class Application { public static void main(String[] args) { DisposableServer server = TcpServer.create() .handle((inbound, outbound) -> outbound.sendString(Mono.just("hello"