Netty - 发送 POST 个请求
Netty - Sending POST requests
这是我的情况:
- 客户端向 Netty 服务器发送 POST 请求。
- 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)
。就是这样。
这是我的情况:
- 客户端向 Netty 服务器发送 POST 请求。
- 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)
。就是这样。