我可以通过 Node.js 调用 JavaJNI?有例子吗?
你应该尝试节点java https://github.com/nearinfinity/node-javanpm 模块是一个编写良好的 JNI 包装器。
Node-jave 似乎还没有被广泛采用,但是在使用它时,我对它的简单和强大印象深刻。
很简单:
var list = java.newInstanceSync("java.util.ArrayList");
list.addSync("item1");
list.addSync("item2");
console.log(list.getSync(1)); // prints "item2"
您可以使用嵌入式 JVM 执行任何操作 - 创建对象、调用方法、访问字段等。
Node 和 Java 之间存在轻微的阻抗不匹配,因此,如果您要与复杂的东西进行交互,我建议您用 Java 编写大部分交互,并跨 Node/Java 屏障公开一个更简单的接口。这样调试起来就更容易了。
--- Dave
p.s.,RealWorldUseCase(tm):我工作的地方在多个浏览器客户端和基于 Java 的服务之间有一个相当复杂(并且是意大利面条式编码)的协议。我写了一个非常漂亮的测试工具,它使用了jsdom https://github.com/tmpvar/jsdom/托管 N 个模拟浏览器并使用节点java https://github.com/nearinfinity/node-java作为 Java 服务代码的包装器。无论是在客户端的 JS 中还是在 Java 中的服务,填充传输接口都是微不足道的,因此每当这些东西发送消息时,我都会捕获该消息并将其放入队列中,以便概率性地传递到预期目标(即,我虚拟化了网络)。通过这种方式,我可以对多个客户端与 Java 服务交互并通过 Java 服务进行交互进行全面模拟,并在单个进程内运行整个过程,而无需任何有线通信。然后我可以做一些有趣的事情,比如故意重新排序消息传递,以确保代码能够适应计时错误。当发现错误时,我会记录消息顺序并可以重现它们以重现该错误。哦,整个过程设置并运行了一个非常复杂的场景,有几千行日志记录,每次运行不到 1 秒就完成了。 2周的时间过得很值。好玩的东西。
现实世界用例#2:硒-inproc https://github.com/ddopson/node-selenium-inproc- 包装 SeleniumRC JAR 文件的模块,为浏览器自动化测试提供节点接口Selenium http://seleniumhq.org/无需运行另一个本地主机服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)