我正在尝试向 Reactor-Netty HttpServer 发送一条大消息。该消息为 1511 字节,根据 HttpClient 日志记录已成功写入,但在服务器端仅读取了 1024 字节。这是因为标头中没有 Content-Length。
Reactor-Netty 有一些发送选项,适用于我的帖子的选项是 send 或 sendObject。send 方法仅提供发送 ByteBuf 的选项,并且 DefaultFullHttpRequest 不提供转换为 ByteBuf 的方法,因此我无法包含标头。
ByteBuf reqContent = getTestRequest();
DefaultFullHttpRequest reqHeader = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, url, reqContent);
ByteBuf headers = Unpooled.wrappedBuffer(reqHeader.headers().toString().getBytes());
client.post(url, clientRequest -> clientRequest.send(Flux.just(headers))).subscribe();
client.post(url, clientRequest -> clientRequest.send(Flux.just(reqHeader.content()))).subscribe(httpClientResponse -> log.debug("Successful" + httpClientResponse.status()),throwable -> log.error("exception " + throwable));
我看不到在哪里设置内容长度,如果我发送一个对象,我会看到标题写了两次:
当我只发送内容时,我看到了一次
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方式来创建套接字等。
谢谢