Netty - 发送 POST 个请求

Netty - Sending POST requests

这是我的情况:

  1. 客户端向 Netty 服务器发送 POST 请求。
  2. Netty 处理 POST 请求并且 如果服务器确定需要发送响应 它向客户端发送回响应。 别的 服务器必须向另一个端点发送 POST 请求,获取响应并将该响应发送回客户端。

到目前为止,我已收到传入的 POST 请求。要发送传出 POST 请求,这就是我在处理程序中所做的。

private void sendHttpPost(String input, ChannelHandlerContext ctx) {
        try {
            String url = "http://localhost";
            URI uri = new URI(url);
            Bootstrap b = new Bootstrap();
            b.group(new NioEventLoopGroup())
            .channel(NioServerSocketChannel.class)
            .handler(new PostRequestHandler())
            .option(ChannelOption.AUTO_READ, false);
           Channel f = b.connect("REMOTE_HOST", 8888).sync().channel();       
           HttpRequest postReq = new DefaultHttpRequest(HttpVersion.HTTP_1_1, 
                                        HttpMethod.POST, uri.getRawPath());
           postReq.headers().set(HttpHeaders.Names.HOST, "localhost");
           postReq.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE);
           postReq.headers().set(HttpHeaders.Names.CONTENT_TYPE,"application/x-www-form-urlencoded");
           f.writeAndFlush(postReq);

           // Wait for the server to close the connection.
           f.closeFuture().sync();
        } catch (Exception e) {
            e.printStackTrace();
        }           
    }

这显然是错误的,因为我在处理程序中启动了一个新的 Bootstrap 进程。但是,我无法在没有通道的情况下发送 HttpRequest。我不能在 ChannelHandlerContext 中重用现有的 Channel。

正确的做法是什么?我怎样才能分叉一个新的 HttpPostRequest。任何帮助将不胜感激。

在您的客户端 bootstrap 代码中使用 .channel(NioSocketChannel.class) 而不是 .channel(NioServerSocketChannel.class)。就是这样。