如何在vert.x中执行长阻塞操作?

时间:2019-02-22 07:57:59

标签: vert.x

Vext.x Core Manual建议使用executeBlocking()执行阻止代码,以防止事件循环被阻止。但是,它也指出:

  

[executeBlocking中的阻止代码应在合理的时间内阻止(即不超过几秒钟)。排除长时间的阻塞操作。当阻止操作持续10秒钟以上时,将在控制台上打印一条消息。 长时间阻止操作应使用由应用程序管理的专用线程,该线程可以使用事件总线或runOnContext与顶点交互

所以我无法在executeBlocking中执行长时间的阻塞操作。

例如,为了说明这一点,例如,我正在阅读以等待无限数据流,例如按下键盘键。每当新数据到达时(按下一个键),我都希望将一个事件调度到事件总线。

while(keyboard.hasNextByte()) { // loops forever
  eventBus.publish("keyboard.keypress", keyboard.nextByte());
}

据我了解,创建自己的线程会破坏Vert.x的设计。那么如何在不使用executeBlocking的情况下执行这种无限阻塞的代码?

1 个答案:

答案 0 :(得分:1)

我认为创建一个单独的线程“由应用程序管理”的想法确实没有问题。 而且,在您的情况下,该线程将非常简单,基本上是在应用程序启动时就启动它。