간단한 Netty 테스트 서버를 사용하여 mongo 데이터베이스를 쿼리하고 결과를 반환하고 싶습니다. 여기에 Netty 저장소의 간단한 hello world 튜토리얼을 설정했습니다 : https://github.com/netty/netty/tree/4.0/example/src/main/java/io/netty/example/http/helloworldNetty와 MongoDB 비동기 콜백이 함께 작동하지 않습니다.
예제와 같이 "hello world"문자열을 반환하는 비동기 MongoDB 호출을 추가하기 위해 간단한 튜토리얼을 수정했습니다. 수정은 HTTP 호출이 완료되지 않습니다.
원본 방법 : 계정 변경 후
public void channelRead(ChannelHandlerContext ctx, Object msg) {
if (msg instanceof HttpRequest) {
HttpRequest req = (HttpRequest) msg;
boolean keepAlive = HttpHeaders.isKeepAlive(req);
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(CONTENT));
response.headers().set(CONTENT_TYPE, "text/plain");
response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
if (!keepAlive) {
ctx.write(response).addListener(ChannelFutureListener.CLOSE);
} else {
response.headers().set(CONNECTION, Values.KEEP_ALIVE);
ctx.write(response);
}
}
}
:
private final MongoCollection<Document> collection = ...
public void channelRead(final ChannelHandlerContext ctx, Object msg) {
if (msg instanceof HttpRequest) {
final HttpRequest req = (HttpRequest) msg;
collection.find(Filters.eq("_id", new ObjectId("..."))).first(new SingleResultCallback<Document>() {
public void onResult(Document document, Throwable throwable) {
boolean keepAlive = HttpUtil.isKeepAlive(req);
FullHttpResponse response = ...
(SAME CODE AS ABOVE)
});
}
}
내가 내 코드를 때리고, 그러나 응답이 클라이언트로 전송 결코 극복 볼 수 있습니다. ServerHandler 메소드에서 비동기 호출을 작성하려면 어떻게해야합니까?