我正在使用 Vertx 3.5.0 并且对它非常陌生。当客户取消他们的请求时,我试图取消代码执行。
目前它已经设置到我们要做的第一件事是部署一个verticle来运行一个HttpServer,然后我们将所有的Routes添加到Router中。从这里开始,每个路由都有一个处理函数。在这个处理程序中,我正在尝试这个:
routingContext.request().connection().closeHandler({
//execute logic for ending execution
});
这是我见过的唯一真正捕获连接关闭的方法,但问题是它在事件循环中没有足够早地执行处理程序。因此,如果我在那里有任何日志,它将如下所示:
...[vert.x-eventloop-thread-0].....
...[vert.x-eventloop-thread-0].....(假设我此时取消了请求)
...[vert.x-eventloop-thread-0].....
...[vert.x-eventloop-thread-0].....(在等待异步数据库调用之前定期执行的最终日志)
...[vert.x-eventloop-thread-0].....(closeHandler代码的执行)
我希望 closeHandler 代码在事件实际发生时中断进程并基本上执行。
无论我何时取消请求,这似乎总是如此,所以我想我错过了一些关于 Vertx 如何处理异步的东西。
我已经尝试通过一个worker Verticle、Router对象的blockingHandler以及HttpServer对象的connectionHandler执行closeHandler代码。所有人都得到了相同的结果。
主要的代码执行也不是由一个worker Verticle执行的,只是一个普通的。
谢谢!