2017-12-31 67 views

답변

0

옵션 2 가지를 생각해 볼 수 있습니다.

  1. 모듈을 서버로 랩핑하고 요청을 수신하십시오. 그런 다음 결과를 java 프로세스로 리턴하십시오.
  2. 자식 프로세스를 실행하십시오. stdout/stderr가 java 프로세스로 리턴됩니다.

저는 개인적으로 옵션 # 2를 선호합니다. 위에서 언급했듯이 v8 자바 스크립트 엔진을 설치해야합니다.

예 :

//process.js 
console.log('process running'); 
console.log(process.argv); 
console.error(new Error('process error')); 
process.exit(0); 

표준 출력은이어야 자바 코드

ProcessBuilder pb = new ProcessBuilder("node", "process", "one", "three", "five") 
Process p = pb.start(); 
//Get output from p 

에서 프로그램을 실행

process running 
[ 'node.exe', 
    'process', 
    'one', 
    'tew', 
    'three'] 

표준 오류가 반환해야합니다 :

Error: process error 
    at Object.<anonymous> (./process.js:5:15) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) 
    at Module.runMain (module.js:604:10) 
    at run (bootstrap_node.js:389:7) 
    at startup (bootstrap_node.js:149:9) 
    at bootstrap_node.js:504:3 
+0

답변을 주셔서 대단히 감사드립니다. 괜찮으 시다면 옵션 2에 대해 조금 더 자세히 설명해 주시겠습니까? Node.js와 여기에 설명 된 방법에 익숙하지 않습니다. – nimbuscoder

+0

내 대답이 업데이트되었습니다. –

0

node.js 패키지에 node.js 패키지를 래핑하고 해당 모듈에서 함수를 호출 할 수있는 프로그램에서 API를 사용할 수있게해야합니다. 아마도 웹 서버를 통해 액세스 할 수 있습니다 (하지만 모든 프로세스 간 통신 메커니즘 만들 수 있습니다). 그런 다음 먼저 node.js 프로그램을 실행해야합니다. 그러면 Java 응용 프로그램이 node.js 서버를 통해 node.js 기능에 액세스 할 수 있습니다.

node.js 자바 스크립트를 실행하려면 node.js 인터프리터가 필요하며 별도의 node.js 프로세스를 실행하여 인터럽트 중 하나만 가져옵니다. 따라서 동일한 프로세스에서 Java에서 Javascript로 직접 브리지를 빌드 할 수는 없습니다. Javascript 프로세스를 작성한 다음 해당 프로세스와 통신해야합니다.