Vext.x Core Manual建议使用executeBlocking()
执行阻止代码,以防止事件循环被阻止。但是,它也指出:
[
executeBlocking
中的阻止代码应在合理的时间内阻止(即不超过几秒钟)。排除长时间的阻塞操作。当阻止操作持续10秒钟以上时,将在控制台上打印一条消息。 长时间阻止操作应使用由应用程序管理的专用线程,该线程可以使用事件总线或runOnContext与顶点交互
所以我无法在executeBlocking
中执行长时间的阻塞操作。
例如,为了说明这一点,例如,我正在阅读以等待无限数据流,例如按下键盘键。每当新数据到达时(按下一个键),我都希望将一个事件调度到事件总线。
while(keyboard.hasNextByte()) { // loops forever
eventBus.publish("keyboard.keypress", keyboard.nextByte());
}
据我了解,创建自己的线程会破坏Vert.x的设计。那么如何在不使用executeBlocking
的情况下执行这种无限阻塞的代码?
答案 0 :(得分:1)
我认为创建一个单独的线程“由应用程序管理”的想法确实没有问题。 而且,在您的情况下,该线程将非常简单,基本上是在应用程序启动时就启动它。