Я создаю платформу Iot и использую Netty для создания http-сервера для этой платформы.Вот что мне нужно:
(1) Некоторое приложение отправляет запрос на мой http-сервер.
(2) Мой http-сервер получает один параметр из http-запроса и на основании этого параметра отправляет другой http-запросдругой сервер.
(3) После ответов другого сервера подготовьте новый HTTP-ответ к исходному приложению.
Я думаю, что в этом процессе сервер является и сервером http, и клиентом.Поэтому у меня есть два набора классов, httpServer
и httpClient
.Моя проблема в том, что после того, как мой сервер получил ответ от другого сервера, я не знаю, как передать ответ из класса httpClientHandler
в класс httpServerHandler
.Я нашел несколько похожих постов, но не получил очень четких инструкций.
Вот ссылки, которые я нашел: (1) события пожара в httpClientHandler
(2) вернуть будущее (3) , кажется, использует другие темы (я действительно не понимаю этого) (4) у этого, кажется, нет ясного ответа.
Ниже приведены решения, которые я пытался (и не смог)
(1) Я пытался передать channelHandlerContext
из httpServerHandler
в httpClientHandler
.И позвоните ctx.writeAndFlush("something")
в httpClientHandler
следующим образом:
public class HttpClientHandler {
private ChannelHandlerContext serverCtx;
public HttpSnoopClientHandler(ChannelHandlerContext serverCtx) {
this.serverCtx = serverCtx;
}
@Override
public void channelRead0(ChannelHandlerContext ctx, HttpObject msg){
this.serverCtx.writeAndFlush("something");
}
}
Но это не сработало.Точнее говоря, я не увидел «что-то», показанное в ответе.
(2) Я также пытался использовать будущее, но не понимаю, куда мне его поместить.В частности, я могу только «получить» ответ в методе channelRead0
из HttpClientHandler
.Как раздать будущий объект для прослушивания httpServerHandler
?
(3) Я также думал об использовании настраиваемого события, но пока не очень ясно, как его реализовать.
Будем благодарны за любые предложения!