node调用java程序做一些文件处理,怎样通信? JNI?
发布于 10 年前 作者 shinka 16870 次浏览 最后一次编辑是 8 年前

希望经验者能分享一下,node调用java程序处理文件怎么掉比较好。 同事告诉我JNI,查了半天没搞明白,node通过JNI跟java通信是怎么样的? 不是简单地起一个进程执行java指令吧?

16 回复

JNI是进程级的,JAVA通过JNI加载其他语言的二进制类库,反向不能实现。 Nodejs调JAVA,效率低,简单,可以走HTTP协议;效率高,略复杂,用Thrift ,走socket协议。

如果java程序常驻,可以用ZeroMQ、RabbitMQ之类通信

数据库是c++写的,nodejs跟c++数据库是怎么通信的? 如果没有编码接口,就通过TCP。nodejs跟数据库正是这样做的。

– 你可以用java写个服务器程序,监听端口 (正如c++写个数据库,监听端口) – nodejs把客户端请求转发给java服务器 – java服务器处理完毕,返回给nodejs响应 – nodejs把结果再返回给客户端

@lonso 见过这个模块,当时同事跟我说JNI我找了下没发现什么例子,这个也算个备选方案吧。3Q

@tulayang 大概明白了。今天把几个方案总结下问下leader意见吧。3q

@nihgwu 这个有想过,以前也做过,不过这个方案中间多了个MQ,维护的cost稍微大了一点,也作为一个方案报告leader吧

@bsspirit 直接http确实感觉效率略低呢。thrift没用过,昨天粗略看了下,没太看明白(也没太仔细看),今天再看看吧。3q

调用Java程序:

  • 只需一次调用还是要多次交互?
  • Java应用的输入和输出是如何定义的?

@bnuhero 多次调用,java主要是生成word文档保存,并返回一份word文档的html版本。有客户在页面上点击生成文档就调用

@shinka

客户在页面上点击,调用Java应用时的输入是什么?

这个Java应用你有权限修改源代码么?

@bnuhero 调用java的输出是一段字符串,里面是html内容。 现在打算用node 的java模块来实现了。

@bsspirit http 效率低 主要低在每次都要建立连接以及包含不必要的HTTP头么?

淘宝的不是实现了 hession 的协议解析了么

@fantasyni hession? 不太懂了 查查去

@shinka 如果说使用MQ进行进程间通信或者应用间通信增加了维护成本,我很想知道你们平时都是使用什么方案进行应用间通信的

@nihgwu 一般有Node模块的就用Node模块,没有的有考虑用MQ,之前的版本用过rabbitMQ,后来找到了node的模块用那个代替了

回到顶部