Вот моя ситуация:Нетти - Отправка POST запросов
- Клиент отправляет запрос POST на Нетти Server.
- Netty обрабатывает запрос POST и Если сервер определяет, что ответ необходимо отправить Он отправляет ответ клиенту. Else Сервер должен отправить запрос 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.
Каков правильный способ сделать это? Как я могу разблокировать новый HttpPostRequest. Любая помощь будет оценена.
Вы не можете использовать существующий канал для подключения к другому серверу с тех пор, как этот канал уже подключен к вашему оригинальному клиенту. Я не вижу ничего плохого в этом коде. И согласно вашему требованию, самонастраивание клиента в обработчике сервера вполне нормально. У вас эта программа работает правильно? – Sudheera
@Sudheera я получаю unsupportedoperation исключение, и этот код не работает .java.lang.UnsupportedOperationException \t в io.netty.channel.socket.nio.NioServerSocketChannel.doConnect (NioServerSocketChannel.java:135) \t при гипергликемии. netty.channel.nio.AbstractNioChannel $ AbstractNioUnsafe.connect (AbstractNioChannel.java:172) \t в io.netty.channel.DefaultChannelPipeline $ HeadHandler.connect (DefaultChannelPipeline.java:1003) \t в io.netty.channel.DefaultChannelHandlerContext. invokeConnect0 (DefaultChannelHandlerContext.java:527) (не может вставить полную трассировку стека) –
вы можете разместить здесь полный класс обработчика? – Sudheera