希望经验者能分享一下,node调用java程序处理文件怎么掉比较好。 同事告诉我JNI,查了半天没搞明白,node通过JNI跟java通信是怎么样的? 不是简单地起一个进程执行java指令吧?
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版本。有客户在页面上点击生成文档就调用
@bnuhero 调用java的输出是一段字符串,里面是html内容。 现在打算用node 的java模块来实现了。
@bsspirit http 效率低 主要低在每次都要建立连接以及包含不必要的HTTP头么?
淘宝的不是实现了 hession 的协议解析了么
@fantasyni hession? 不太懂了 查查去
@shinka 如果说使用MQ进行进程间通信或者应用间通信增加了维护成本,我很想知道你们平时都是使用什么方案进行应用间通信的
@nihgwu 一般有Node模块的就用Node模块,没有的有考虑用MQ,之前的版本用过rabbitMQ,后来找到了node的模块用那个代替了