使用java/scala代码连接node.js进程的最快方法

Ph0*_*n1x 6 java performance ipc shared-memory node.js

我有一个用java/scala实现的计算库.我还有一些node.js代码为我的应用程序提供服务.我需要找到一种方法,如何以最大的性能连接这2个世界,同时还要考虑简单性.我正在考虑通过共享内存进行进程间通信,但是在node.js中找不到任何成熟的方法

这应该主要作为代理机制从node.js代码调用一些java(理想情况下是任何)代码.从node.js到java方面,它只是请求元数据传递,但是从java到node.js有时可能会返回重要的数据(假设上边界为100-200 kb,90%左右为600-1000字节)但是,这个请求的数量可能很大.

认为OpenMP可能是一个选项,但也找不到Node的任何openmp协议实现.但是,对于java也没有明确的项目.


看起来目前的时刻有几种选择:

  1. 本机扩展+ Java不安全(目前通过反射提取,应该在JDK 9中打开)并在基于C/C++的env中使用共享内存(需要调查和开发.节点的松散 - > c - > Java可能高于共享内存的好处)
  2. 使用socket(在linux上相当快,不确定Windows,跨平台)
  3. FastCGI(仍然使用套接字在内部传输,因此将慢于1个选项)
  4. ZeroMQ/Nanomessage作为传输层(再次插入内部,但简化了开发)
  5. @大卫的回答.但是不能说具体一点.需要调查.

Dav*_*ock 1

好吧,如果套接字对您来说太慢,为什么不将其保留在进程中呢?

你可以尝试:

  1. 在Nodyn上运行未修改的 Node.js 脚本,而 Nodyn 脚本又在JVM 上的DynJS 上运行;-或者-
  2. 如果您不特别关注 Node.js 堆栈,但喜欢 JVM 上的极端无等待吞吐量的想法,请将其全部编码在vert.x中。

注意:Nodyn/DynJS 的替代方案Avatar.js项目,该项目使用Nashorn,而 Nashorn 随最新的 JVM 一起提供,并使用最新、最好的字节码运算符。然而,在 2015 年底,Avatar.js 项目感觉被遗弃了。:-\