问题标签 [reactor-netty]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1107 浏览

java - 关闭 Reactor 3.0.4 中的 netty TcpClient 通道

我刚刚将 projectreactor.io 从 reactor OLD升级:[core: 3.0.1 .RELEASE, netty: 0.5.2 .RELEASE] 到 reactor NEW [core: 3.0.4 .RELEASE, netty: 0.6.0 .RELEASE]。

我打开一个 TcpClient 连接并想稍后关闭它。

在我使用的版本中

断开我的客户端与服务器的连接。

新版本中是否有等效调用?我找不到一个!

我在创建我的 TcpClient 时得到的NettyInboundNettyOutboundtcpClient.newHandler(...)

  • .context().dispose()
  • .context().channel().disconnect()
  • .context().channel().close()
  • TcpResources.reset()

他们似乎都没有正确地完成这项工作。

我注意到.context().onClose(...)正在调用相应的 -callback 。但是经过一些额外的等待,服务器端会检查连接。服务器端是普通的 NIO2 而不是 reactor/netty,当客户端升级时,服务器端保持不变。

使用OLD客户端,我.isOpen() == false为服务器端的每个频道提供服务。

使用客户端,我可以获得.isOpen() == true服务器端的每个频道。大多数时候我什至可以写信给频道。.isOpen() == false一些通道在写入几个字节后切换到。

0 投票
1 回答
746 浏览

spring-webflux - 从 RestController 中的 TCP 服务器获取响应

我的 Spring webflux 控制器需要访问远程 TCP 服务器。如何将来自 TCP 服务器的响应流式传输到客户端?

就像是:

但是使用 TcpClient(不是 WebClient)。

谢谢,

- 缺口

0 投票
1 回答
1727 浏览

reactor-netty - 带有管道的 Reactor Netty TcpServer

在 reactor netty 之前,我组装一个 Netty Tcp 服务器的方式是创建服务器引导程序并添加我的自定义管道类。使用 Reactor-Netty 有 TcpServer.create(),但似乎我必须创建一个新的功能接口,该接口采用 NettyInbound 和 NettyOutbound 并返回一个 Mono。但是,如果我想添加一个构建管道的 ChannelInitializer,我必须阻止获取 NettyContext。传入的消息由功能接口接收,我可以发送响应,但没有任何东西通过我的管道。

有没有办法让我们使用 Reactor Netty 并让消息通过定制的管道流动?

在建立连接和收到消息时,使用 neverComplete() 返回 Mono.just("Hi") 成功地向客户端发送“Hi”,但我需要将其卸载到管道然后获取结果馈送回到客户端。

0 投票
0 回答
614 浏览

java - 如何在没有 SSL 的情况下创建 Reactor Netty HttpClient

我正在创建一个 HttpClient 来将一个简单的字符串发送到我目前正在使用 mockserver-netty 模拟的服务器。

其中 getTestRequest() 返回我为测试构建的字符串。

但是,似乎我必须设置一个带有错误的整个 SSL 环境:

无法加载库“netty-tcnative”,尝试下一个名称等

ReactiveException:javax.net.ssl.SSLException:握手超时

有没有一种方法可以在不设置 SSL 的情况下使用 reactor netty 的 HttpClient?

谢谢

0 投票
0 回答
447 浏览

netty - 使用 Reactor Netty HttpClient 发送 DefaultFullHttpRequest

我正在尝试向 Reactor-Netty HttpServer 发送一条大消息。该消息为 1511 字节,根据 HttpClient 日志记录已成功写入,但在服务器端仅读取了 1024 字节。这是因为标头中没有 Content-Length。

Reactor-Netty 有一些发送选项,适用于我的帖子的选项是 send 或 sendObject。send 方法仅提供发送 ByteBuf 的选项,并且 DefaultFullHttpRequest 不提供转换为 ByteBuf 的方法,因此我无法包含标头。

我看不到在哪里设置内容长度,如果我发送一个对象,我会看到标题写了两次:

当我只发送内容时,我看到了一次

14:39:46.645 [reactor-http-nio-4] 调试 rincChannelOperationsHandler - [id: 0x85f9df60, L:/127.0.0.1:57054 - R:localhost/127.0.0.1:8092] 写入对象 DefaultHttpRequest(解码结果:成功,版本: HTTP/1.1) POST /xmlvend HTTP/1.1 用户代理: ReactorNetty/0.6.3.RELEASE 传输编码: 分块主机: localhost:8092 接受: /

然后再次使用内容长度

14:39:46.650 [reactor-http-nio-4] 调试 rincChannelOperationsHandler - [id: 0x85f9df60, L:/127.0.0.1:57054 - R:localhost/127.0.0.1:8092] 写入对象 DefaultFullHttpRequest(decodeResult: 成功,版本: HTTP/1.1, 内容: UnpooledHeapByteBuf(ridx: 0, widx: 1511, cap: 1511/1511)) POST /xmlvend HTTP/1.1 Content-Length: 1511

有没有办法使用reactor-netty发送FullHttpRequest,当然我不必采用正常的netty方式来创建套接字等。

谢谢

0 投票
0 回答
571 浏览

project-reactor - Reactor-Netty:意外消息类型:PooledUnsafeDirectByteBuf

我有一个 HttpServer 和一个 HttpClient。如果我在任一侧使用 Netty 的 HttpServerCodec 和 HttpObjectAggregator,我都会收到错误消息。

服务器代码

客户

serverEndPoint 还包含 HttpServerCodec 和 ObjectAggregator。我尝试使用 HttpClientCodec,在管道中不使用任何内容尝试发送 DefaultFullHttpRequest。要么我得到了异常,要么在客户端只读取了 1024 个字节。我需要发送一个超过 1024 字节的分块请求。

谢谢

0 投票
0 回答
1252 浏览

netty - 读取具有 PooledUnsafeDirectByteBuf 的 HttpContent

我有一个 Reactor-Netty HttpServer,我从 HttpClient 向其发送超过 1024 个字节的数据。

在客户端中,我在 Flux 中获取请求的不同部分,其想法是将数据连接成一个我最终可以解析的字符串。我认为这可以由 HttpObjectAggregator 完成,但可惜不是。

当客户端收到内容时,它以

DefaultHttpContent(数据: PooledSlicedByteBuf(ridx: 1024, widx: 1024, cap: 1024/1024, unwrapped: PooledUnsafeDirectByteBuf(ridx: 1024, widx: 1024, cap: 1024)), decoderResult: 成功)

DefaultLastHttpContent(数据: PooledSlicedByteBuf(ridx: 98, widx: 98, cap: 98/98, unwrapped: PooledUnsafeDirectByteBuf(ridx: 98, widx: 98, cap: 1024)), decoderResult: 成功)

如果我尝试“提取”字节,我发现它们不可用。

服务器

客户

知道如何获取数据吗?

数据记录到控制台,例如:

98B +------------------------------------------------ -+ | 0 1 2 3 4 5 6 7 8 9 abcdef | +--------+---------------------------------------- ---------+----------------+ |00000000| 54 68 61 6e 31 30 32 34 62 79 74 65 73 6d 6f 72 |Than1024bytesmor| |00000010| 65 54 68 61 6e 31 30 32 34 62 79 74 65 73 6d 6f |eThan1024bytesmo| |00000020| 72 65 54 68 61 6e 31 30 32 34 62 79 74 65 73 6d |reThan1024bytesm| |00000030| 6f 72 65 54 68 61 6e 31 30 32 34 62 79 74 65 73 |oreThan1024bytes| |00000040| 6d 6f 72 65 54 68 61 6e 31 30 32 34 62 79 74 65 |超过1024字节| |00000050| 73 6d 6f 72 65 54 68 61 6e 31 30 32 34 62 79 74 |超过1024字节| |00000060| 65 73 |es | +--------+---------------------------------------- ---------+----------------+ | +--------+---------------------------------------- ---------+----------------+ | +--------+---------------------------------------- ---------+----------------+

谢谢

0 投票
1 回答
988 浏览

spring - 如何在 Spring Boot 应用程序中为 Netty 配置 TLS?

我的微服务正在使用最新版本的 Spring Boot、Spring WebFlux (Undertow)、Spring Data MongoDB、Spring Cloud Netflix 和 Kotlin...

现在我已经设置了一个演示项目来使用新的功能接口而不是 Spring WebFlux 中的注释。使用带有 HTTP 的 Netty 可以正常工作。但是,我找不到任何有关如何使用 TLS 配置 Netty 的信息。HTTPS。任何提示表示赞赏!

0 投票
10 回答
34791 浏览

spring - 如何在 Spring 5 WebFlux WebClient 中设置超时

我正在尝试在我的 WebClient 上设置超时,这是当前代码:

我需要添加超时和池策略,我在想这样的事情:

但我不知道如何在我的网络客户端中设置 httpClient

0 投票
2 回答
15154 浏览

spring-boot - 如何在spring boot 2中配置netty

默认情况下,spring web Flux 使用 netty,它是单线程事件循环。如何配置 Spring Boot 以便为每个核心创建一个线程。

谢谢,

洛克什