【发布时间】:2018-09-21 08:22:02
【问题描述】:
我使用 Vert.x v3.5.1。 有最简单的代码示例:
vertx.createHttpServer()
.requestHandler(anyRouter::accept)
.listen(8080);
在我的例子中,事件循环组的大小是 16,所以我希望我的请求会影响 16 个线程。服务器已成功启动,但它仅在一个线程中工作。 (我使用不同的 tcp-connections 发送请求,所以 keep-alive 不是这里的原因。)HttpServerImpl 类包含 httpHandlerMgr,这个管理器处理一个事件循环池(命名为 availableWorkers)。在调试过程中,我看到这个池只包含 一个 工人。
使用 Verticle 模型并不能解决问题,仍然没有使用所有线程。
如果我在循环中多次创建服务器,它会有所帮助。结果,我有许多受影响的线程和一台共享服务器。但它看起来像解决方法。
问题是如何创建使用所有可用事件循环线程的 Web 服务器?
Verticle 下面的实现
因此,此实现使用了一半的可用线程(8 个线程)。但我希望它使用 16 :)
public static void main(String[] args) throws Exception {
int eventLoopSize = 16;
Vertx vertx = new VertxOptions().setEventLoopPoolSize(eventLoopSize);
for (int i=0;i<eventLoopSize; i++) {
vertx.deployVerticle(new MyServer(vertx), deploymentOptions);
}
}
public class MyServer implements Verticle {
final Vertx vertx;
public MyServer(Vertx vertx) {
this.vertx = vertx;
}
@Override
void init(Vertx vertx, Context context) {
vertx.createHttpServer()
.requestHandler(anyRouter::accept)
.listen(8080);
}
}
【问题讨论】:
标签: vert.x event-loop