【发布时间】:2018-04-08 12:45:05
【问题描述】:
我正在尝试实现一个用于上传文件的 Http 服务。上传的文件通过原始请求体传输。这是我用 vertx 3 实现的
public class MainVerticle extends AbstractVerticle {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new MainVerticle());
}
public static void log(String message) {
System.out.printf("%s > %s\n", System.currentTimeMillis(), message);
}
@Override
public void start(Future<Void> fut) {
// Create a router object.
Router router = Router.router(vertx);
router.route().handler(BodyHandler.create());
router.route("/api/v1.0/log/write")
.handler(routingContext -> {
log("Processing... ");
JsonObject result = new JsonObject();
result.put("status", "ok");
routingContext.response()
.putHeader("content-type", "application/json")
.end(result.toString());
});
Handler<HttpServerRequest> handler = new Handler<HttpServerRequest>() {
@Override
public void handle(HttpServerRequest request) {
request.handler(buffer -> log("Handling2...." + buffer.length()));
request.endHandler(aVoid -> {
log("Done");
JsonObject result = new JsonObject();
result.put("status", "ok");
request.response()
.putHeader("content-type", "application/json")
.end(result.toString());
});
}
};
vertx
.createHttpServer()
.requestHandler(router::accept)
.listen(9231, result -> {
if (result.succeeded()) {
fut.complete();
} else {
fut.fail(result.cause());
}
});
}
}
为了验证服务,我运行了以下脚本:
max=50
for i in `seq 2 $max`
do
curl -H "Content-Type: application/json" \
-X POST \
--max-time 10 \
--retry 5 \
--retry-delay 0 \
--retry-max-time 60 \
--data-binary "@./512-kb.log" \
http://localhost:9231/api/v1.0/log/write
echo "\n"
done
令我惊讶的是,服务执行速度如此之慢。大约 1 个请求/秒。以下是运行时日志:
text
Apr 08, 2018 7:41:06 PM io.vertx.core.Starter
INFO: Succeeded in deploying verticle
1523191273 > Processing...
1523191274 > Processing...
1523191275 > Processing...
1523191276 > Processing...
1523191277 > Processing...
1523191278 > Processing...
您能告诉我如何以正确的方式实现它吗?提前致谢。
【问题讨论】: