Javascript 如何使我的vert.x进程退出

Javascript 如何使我的vert.x进程退出,javascript,linux,vert.x,Javascript,Linux,Vert.x,我对vert.x完全陌生,我用JavaScript编写了一个hello world程序: console.log("Hello, World"); 当我从linux命令行(在旧的ubuntu开发系统上,如果有必要的话)运行程序时,程序会运行,但不会退出: hostname$ ./node_modules/.bin/vertx run server.js Hello, World Succeeded in deploying verticle ^Chostname$ 我必须按CTRL-C终止进

我对vert.x完全陌生,我用JavaScript编写了一个hello world程序:

console.log("Hello, World");
当我从linux命令行(在旧的ubuntu开发系统上,如果有必要的话)运行程序时,程序会运行,但不会退出:

hostname$ ./node_modules/.bin/vertx run server.js
Hello, World
Succeeded in deploying verticle
^Chostname$
我必须按CTRL-C终止进程,这似乎是错误的。在我们的生产环境中,流程完成后退出是可取的

我找到了:,因此我添加了对
vertx.close
方法的调用:

console.log("Hello, World");
vertx.close( function onClose() {
    console.log("Goodbye, cruel world.");
});
调用
onClose
函数时,进程不会退出:

hostname$ node_modules/.bin/vertx run server.js
Hello, World
Succeeded in deploying verticle
Goodbye, cruel world.
^Chostname$
我还尝试了这里建议的
vertx.exit()
,但进程仍然没有退出

最后,我发现这个讨论()在linux上运行时似乎包含了一个vert.x的Java代码补丁,但这似乎非常繁重

下面是一个版本号列表,供可能好奇的人参考:

hostname$ node_modules/.bin/vertx -version
3.0.0
hostname$ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) Server VM (build 25.91-b14, mixed mode)
hostname$ uname -a
Linux hostname 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:42:40 UTC 2014 i686 athlon i386 GNU/Linux
hostname$
所以几次失败的谷歌尝试之后,我请求So的帮助。我做错了什么

[POSTSCRIPT]

所以看起来我是TL;在上DR'ed“Java代码补丁”。代码的关键行是:

System.exit(0);

工作起来很有魅力。我把这篇文章贴在这里,让其他人从我的错误中吸取教训。笨拙的脸红

我认为vert.x无意以这样的批处理模式运行。x提供了一个运行时环境来处理事件。它提供可用于处理事件的eventloops

查看本演示文稿,它很好地解释了vert.x的核心概念:

Vert.x是用java实现的,当您像这样启动vertx时,就启动jvm,它执行vertx核心,然后执行javascript。问题是,我认为您无法从javascript文件访问java执行环境

如果您愿意编写一点java代码,我为您编写了一个可能的解决方案:


请注意,如果在我扩展AbstractVerticle时需要在Verticle之间进行通信,则每次都必须通过eventbus进行通信,例如:
public class MainVerticle extends AbstractVerticle
,我可以使用:

    this.getVertx().close();
引用:

导致Vert.x退出 由Vert.x实例维护的线程不是守护进程线程,因此它们将阻止JVM退出。 如果您正在嵌入Vert.x,并且已经完成了它,那么可以调用
close
将其关闭。 这将关闭所有内部线程池并关闭其他资源,并允许JVM退出

请记住,如果您的verticle有简单的同步清理任务要完成,请覆盖
stop
方法并将清理代码放在此处

  @Override
  public void stop() {
    System.out.println("stopping..."); 
  }