私は「反応性」を間違って理解していますか、私の例では間違っていますか? Vertxで小さなコードサンプルを作成しました.RESTサービスでは、mongodbからデータを読み取り、JSONとして返します。次のVert.xのコードは本当に反応しますか?
...........
Router router = Router.router(vertx);
router.route().handler(BodyHandler.create());
router.get("/gilders").handler(this::listAll);
vertx.createHttpServer().requestHandler(router::accept).listen(8080);
}
private void listAll(RoutingContext routingContext) {
mongoClient.find("gliders", new JsonObject(), results -> {
List<JsonObject> objects = results.result();
/* is this non blocking?!
mongoClient.find return immediately, but the rest client just
gets results, after mongo delivered all results
*/
List<Glider> gilder = objects.stream()
.map(res -> {
Glider g = new Glider();
g.setName(res.getString("name"));
g.setPrice(res.getString("price"));
return g;
})
.collect(Collectors.toList());
routingContext.response()
.putHeader("content-type", "application/json; charset=utf-8")
.end(Json.encodePrettily(gilder));
});
}
OK、ブロックしないで、私はmongoを待っている間に何かを計算することができました。
しかし、どういうわけか私はRESTクライアントがすでにmongoの結果の最初のチャンクを取得しているということも考えています。でもmongoはまだその時間までにすべてを見つける準備ができていません(HTTPストリーミング)。しかし、このように、コールバックはmongoがすべての結果を見つけたときに呼び出されます。
私はすでに気づいたdownvoteに、これは一種の愚かな質問だった。しかし、私は馬鹿なままでいるよりも愚かな質問をする方が良いと思った – midnight