Linux, Mac 및 Windows를 완벽하게 지원하는 로컬 및 원격 프로세스 간 통신을 위한 nodejs 모듈입니다 . 또한 낮은 수준의 Unix 및 Windows 소켓에서 UDP 및 보안 TLS 및 TCP 소켓에 이르기까지 모든 형태의 소켓 통신을 지원합니다.
Node.JS의 복잡한 다중 프로세스 신경망을 위한 훌륭한 솔루션
npm install node-ipc
npm install node-ipc@^9.0.0
//es6
import ipc from 'node-ipc'
//commonjs
const ipc = require ( 'node-ipc' ) . default ;
npm info : node-ipc에 대한 npm 동향 및 통계를 확인하세요.
GitHub 정보:
코드 적용 범위 정보:
npm run coverage
실행하여 localhost:8080에서 커버리지 보고서의 로컬 버전을 호스팅합니다. 이는 이스탄불 및 NYC와 동일한 형식입니다. 매우 익숙할 것입니다.
바닐라 테스트로 테스트 완료
vanilla-test
코드를 트랜스파일할 필요 없이 기본 ESM 적용 범위를 위해 c8과 통합됩니다. 이 글을 쓰는 시점에서는 이것이 ESM을 기본적으로 테스트하는 유일한 방법이며 정말 놀랍습니다!
패키지 세부정보 웹사이트:
이 저작물은 MIT 라이선스를 통해 라이선스가 부여됩니다.
최신 버전의 node-ipc
--harmony 플래그와 함께 작동할 수 있습니다. 하지만 공식적으로는 es5 및 es6에서 노드 v4 이상을 지원합니다.
npm test
node-ipc용 이스탄불로 jasmine 테스트를 실행하고 spec 폴더에 적용 범위 보고서를 생성합니다.
sudo npm install -g jasmine istanbul
사용하여 전 세계적으로 jasmine과 istanbul을 설치할 수 있습니다.
유형 | 안정 | 정의 |
---|---|---|
Unix 소켓 또는 Windows 소켓 | 안정적인 | Linux, Mac 및 Windows의 매우 빠른 통신을 제공하고 네트워크 카드를 사용하지 않아 오버헤드와 대기 시간을 줄입니다. 로컬 Unix 및 Windows 소켓 예 |
TCP 소켓 | 안정적인 | 네트워크 전체에서 가장 안정적인 통신을 제공합니다. 로컬 IPC에도 사용할 수 있지만 TCP 소켓은 네트워크 카드를 통과하지만 Unix 소켓과 Windows 소켓은 통과하지 않기 때문에 #1의 Unix 소켓 구현보다 느립니다. 로컬 또는 원격 네트워크 TCP 소켓 예 |
TLS 소켓 | 안정적인 | SSL을 통해 구성 가능하고 안전한 네트워크 소켓. https와 동일합니다. TLS/SSL 문서 |
UDP 소켓 | 안정적인 | 가장 빠른 네트워크 통신을 제공합니다. UDP는 신뢰성이 떨어지지만 TCP보다 훨씬 빠릅니다. 네트워크 연결 및 기타 요인에 따라 패킷이 삭제될 수 있으므로 사운드, 비디오 또는 멀티플레이어 게임 데이터와 같은 중요하지 않은 데이터를 스트리밍하는 데 가장 적합합니다. UDP는 로컬 IPC에도 사용할 수 있지만 UDP 소켓은 네트워크 카드를 통과하지만 Unix 및 Windows 소켓은 통과하지 않기 때문에 #1의 Unix 소켓 또는 Windows 소켓 구현보다 느립니다. 로컬 또는 원격 네트워크 UDP 소켓 예 |
OS | 지원되는 소켓 |
---|---|
리눅스 | 유닉스, 포식스, TCP, TLS, UDP |
스코틀랜드 사람 | 유닉스, 포식스, TCP, TLS, UDP |
이기다 | 윈도우, TCP, TLS, UDP |
ipc.config
기본값을 덮어쓰거나 설정하려면 ipc.config
범위에서 이러한 변수를 설정하세요.
{
appspace : 'app.' ,
socketRoot : '/tmp/' ,
id : os . hostname ( ) ,
networkHost : 'localhost' , //should resolve to 127.0.0.1 or ::1 see the table below related to this
networkPort : 8000 ,
readableAll : false ,
writableAll : false ,
encoding : 'utf8' ,
rawBuffer : false ,
delimiter : 'f' ,
sync : false ,
silent : false ,
logInColor : true ,
logDepth : 5 ,
logger : console . log ,
maxConnections : 100 ,
retry : 500 ,
maxRetries : false ,
stopRetrying : false ,
unlink : true ,
interfaces : {
localAddress : false ,
localPort : false ,
family : false ,
hints : false ,
lookup : false
}
}
변하기 쉬운 | 선적 서류 비치 |
---|---|
앱 공간 | Unix 소켓(Unix 도메인 소켓) 네임스페이스에 사용됩니다. 구체적으로 설정되지 않은 경우 Unix 도메인 소켓은 소켓 루트, 앱 공간 및 ID를 결합하여 생성 또는 바인딩을 위한 Unix 소켓 경로를 형성합니다. 시스템에서 실행 중인 앱이 많고 동일한 ID를 가진 소켓이 여러 개 있을 수 있지만 앱 공간을 변경하면 앱별 고유 소켓이 계속 유지되는 경우에 사용할 수 있습니다. |
소켓루트 | Unix 소켓을 생성하거나 바인드할 디렉터리 |
ID | 이 소켓 또는 서비스의 ID |
네트워크호스트 | TCP, TLS 또는 UDP 소켓이 연결되어야 하는 로컬 또는 원격 호스트 |
네트워크 포트 | TCP, TLS 또는 UDP 소켓이 연결되어야 하는 기본 포트 |
모두 읽을 수 있음 | Windows 서비스를 포함한 모든 사용자가 파이프를 읽을 수 있도록 만듭니다. |
쓰기 가능모두 | Windows 서비스를 포함한 모든 사용자가 파이프에 쓸 수 있도록 만듭니다. |
부호화 | 소켓으로 전송되는 데이터의 기본 인코딩입니다. rawBuffer가 true로 설정된 경우 주로 사용됩니다. 유효한 값은 다음과 같습니다: ascii utf8 utf16le ucs2 base64 hex . |
rawBuffer | true인 경우 데이터는 JSON 형식의 Object 아닌 원시 노드 Buffer 로 전송 및 수신됩니다. 이는 바이너리 또는 16진수 IPC에 적합하며 C 및 C++와 같은 언어로 다른 프로세스와 통신합니다. |
구분 기호 | 각 데이터 패킷 끝에 있는 구분 기호입니다. |
동조 | 동기 요청. 클라이언트는 서버가 응답할 때까지 새 요청을 보내지 않습니다. |
조용한 | 로깅 켜기/끄기 기본값은 false입니다. 이는 로깅이 켜져 있음을 의미합니다. |
로그인 색상 | ipc.log에 대한 util.inspect 색상 켜기/끄기 |
로그 깊이 | ipc.log 중에 util.inspect의 깊이를 설정합니다. |
나무꾼 | ipc.log로부터 출력을 수신하는 함수; 단일 문자열 인수를 취해야 합니다. |
최대 연결수 | 이는 소켓에 허용되는 최대 연결 수입니다. 현재는 Unix 소켓에만 설정되고 있습니다. 다른 소켓 유형은 시스템 기본값을 사용합니다. |
다시 해 보다 | 연결이 끊어진 경우 클라이언트가 서버에 다시 연결을 시도하기 전에 대기하는 시간(밀리초)입니다. UDP 소켓에는 Unix 소켓 및 TCP 소켓과 같은 클라이언트 서버 관계가 없으므로 이는 영향을 미치지 않습니다. |
최대 재시도 횟수 | 설정된 경우 특정 연결을 포기하고 완전히 종료하기 전에 연결을 끊을 때마다 최대 재시도 횟수를 나타냅니다. |
중지재시도 중 | 기본값은 false로, 클라이언트가 재시도 간격에 따라 무기한으로 서버 연결을 계속 재시도함을 의미합니다. 임의의 숫자로 설정되면 연결이 끊길 때마다 해당 숫자가 초과될 때 클라이언트가 재시도를 중지합니다. 실시간으로 true로 설정하면 maxRetries에 관계없이 연결 시도가 즉시 중지됩니다. 0으로 설정하면 클라이언트는 다시 연결을 시도 하지 않습니다 . |
풀리다 | 기본값은 모듈이 시작하기 전에 IPC 소켓 삭제를 처리한다는 의미인 true입니다. 동일한 소켓에 여러 리스너가 있는 클러스터 환경에서 node-ipc 사용하는 경우 이를 false 로 설정한 다음 자체 코드에서 소켓을 삭제해야 합니다. |
인터페이스 | 클라이언트가 어떤 인터페이스를 통해 연결해야 하는지 지정할 때 주로 사용됩니다. node.js API의 Socket.connect 문서를 참조하세요. |
이러한 방법은 IPC 범위에서 사용할 수 있습니다.
ipc.log(a,b,c,d,e...);
ipc.log는 임의 개수의 인수를 허용하며 ipc.config.silent
설정되지 않은 경우 인수 사이에 단일 공백 ' '을 사용하여 모든 인수를 연결한 다음 콘솔에 기록합니다. ipc.config.silent가 true
로 설정된 경우 연결이 발생하는 것을 방지하므로 속도가 빠릅니다. 이렇게 하면 로깅을 그대로 두면 성능에 거의 영향을 미치지 않습니다.
로그는 util.inspect도 사용합니다. ipc.config
통해 색상, 로그 깊이 및 대상을 로그인해야 하는지 여부를 제어할 수 있습니다.
ipc . config . logInColor = true ; //default
ipc . config . logDepth = 5 ; //default
ipc . config . logger = console . log . bind ( console ) ; // default
ipc.connectTo(id,path,callback);
로컬 Unix 소켓 및 Windows 소켓에 클라이언트로 연결하는 데 사용됩니다. 이는 TCP와 UDP가 모두 사용해야 하는 네트워크 카드를 우회하기 때문에 동일한 시스템의 프로세스가 통신하는 가장 빠른 방법입니다 .
변하기 쉬운 | 필수의 | 정의 |
---|---|---|
ID | 필수의 | 연결되는 소켓의 문자열 ID입니다. 이 ID를 가진 소켓은 생성 시 ipc.of 객체에 추가됩니다. |
길 | 선택 과목 | Unix 도메인 소켓 파일의 경로입니다. 시스템이 Windows인 경우 Unix 도메인 소켓 파일과 동일한 정보를 가진 적절한 파이프로 자동 변환됩니다. 설정하지 않으면 기본값은 ipc.config.socketRoot + ipc.config.appspace + id 입니다. |
콜백 | 선택 과목 | 소켓이 생성될 때 실행되는 함수입니다. |
예제 인수는 순서대로 있는 한 생략할 수 있습니다.
ipc . connectTo ( 'world' ) ;
또는 ID와 콜백만 사용하여
ipc . connectTo (
'world' ,
function ( ) {
ipc . of . world . on (
'hello' ,
function ( data ) {
ipc . log ( data . debug ) ;
//if data was a string, it would have the color set to the debug style applied to it
}
)
}
) ;
또는 경로를 명시적으로 설정
ipc . connectTo (
'world' ,
'myapp.world'
) ;
또는 콜백을 사용하여 경로를 명시적으로 설정
ipc . connectTo (
'world' ,
'myapp.world' ,
function ( ) {
...
}
) ;
ipc.connectToNet(id,host,port,callback)
네트워크 카드를 통해 TCP 또는 TLS 소켓에 클라이언트로 연결하는 데 사용됩니다. 이는 로컬 또는 원격일 수 있습니다. 로컬인 경우에는 네트워크 카드를 완전히 사용하지 않으므로 훨씬 빠르기 때문에 대신 connectTo
의 Unix 및 Windows 소켓 구현을 사용하는 것이 좋습니다.
TLS 및 SSL 소켓에 대해서는 node-ipc TLS 및 SSL 문서를 참조하세요. 몇 가지 추가 요구 사항과 알아야 할 사항이 있으므로 자체 문서가 있습니다.
변하기 쉬운 | 필수의 | 정의 |
---|---|---|
ID | 필수의 | 연결되는 소켓의 문자열 ID입니다. TCP & TLS 소켓의 경우, 소켓에 대한 참조를 사용하여 소켓이 생성될 때 이 ID가 ipc.of 객체에 추가됩니다. |
주인 | 선택 과목 | TCP 또는 TLS 소켓이 상주하는 호스트입니다. 지정하지 않으면 기본값은 ipc.config.networkHost 입니다. |
포트 | 선택 과목 | TCP 또는 TLS 소켓이 있는 포트입니다. |
콜백 | 선택 과목 | 소켓이 생성될 때 실행되는 함수입니다. |
예제 인수는 순서대로 있는 한 생략할 수 있습니다.
따라서 기본값은 (id,host,port,callback)이지만 다음 예제는 (id,port,callback) 또는 (id,host,callback) 또는 (id,port) 등의 순서이므로 계속 작동합니다. .
ipc . connectToNet ( 'world' ) ;
또는 ID와 콜백만 사용하여
ipc . connectToNet (
'world' ,
function ( ) {
...
}
) ;
또는 호스트와 경로를 명시적으로 설정
ipc . connectToNet (
'world' ,
'myapp.com' , serve ( path , callback )
3435
) ;
또는 명시적으로 포트와 콜백만 설정
ipc . connectToNet (
'world' ,
3435 ,
function ( ) {
...
}
) ;
ipc.disconnect(id)
Unix, Windows, TCP 또는 TLS 소켓에서 클라이언트 연결을 끊는 데 사용됩니다. 소켓과 그 참조는 메모리와 ipc.of
범위에서 제거됩니다. 이는 로컬일 수도 있고 원격일 수도 있습니다. UDP 클라이언트는 연결을 유지하지 않으므로 클라이언트가 없으며 이 방법은 가치가 없습니다.
변하기 쉬운 | 필수의 | 정의 |
---|---|---|
ID | 필수의 | 연결을 끊을 소켓의 문자열 ID입니다. |
예
ipc . disconnect ( 'world' ) ;
ipc.serve(path,callback);
클라이언트가 바인딩할 수 있는 로컬 Unix 소켓 서버 또는 Windows 소켓 서버를 생성하는 데 사용됩니다. 서버는 특정 클라이언트 소켓으로 이벤트를 emit
거나 알려진 모든 클라이언트 소켓으로 이벤트를 broadcast
할 수 있습니다.
변하기 쉬운 | 필수의 | 정의 |
---|---|---|
길 | 선택 과목 | 이것은 Unix 도메인 소켓 파일의 경로입니다. 시스템이 Windows인 경우 Unix 도메인 소켓 파일과 동일한 정보를 가진 적절한 파이프로 자동 변환됩니다. 설정하지 않으면 기본값은 ipc.config.socketRoot + ipc.config.appspace + id 입니다. |
콜백 | 선택 과목 | 서버가 시작된 후 호출되는 함수입니다. 이는 ipc.server.on('start',function(){}); 과 같이 시작 이벤트에 이벤트를 바인딩하여 수행할 수도 있습니다. |
예제 인수는 순서대로 있는 한 생략할 수 있습니다.
ipc . serve ( ) ;
또는 콜백 지정
ipc . serve (
function ( ) { ... }
) ;
또는 경로를 지정하십시오
ipc . serve (
'/tmp/myapp.myservice'
) ;
또는 모든 것을 지정
ipc . serve (
'/tmp/myapp.myservice' ,
function ( ) { ... }
) ;
serveNet(host,port,UDPType,callback)
클라이언트가 바인딩할 수 있거나 다른 서버가 데이터를 보낼 수 있는 TCP, TLS 또는 UDP 소켓 서버를 만드는 데 사용됩니다. 서버는 특정 클라이언트 소켓으로 이벤트를 emit
거나 알려진 모든 클라이언트 소켓으로 이벤트를 broadcast
할 수 있습니다.
변하기 쉬운 | 필수의 | 정의 |
---|---|---|
주인 | 선택 과목 | 지정하지 않으면 기본값은 os.networkInterfaces()의 첫 번째 주소입니다. TCP, TLS 및 UDP 서버의 경우 이는 127.0.0.1 또는 ::1일 가능성이 높습니다. |
포트 | 선택 과목 | TCP, UDP 또는 TLS 소켓 서버가 바인딩될 포트입니다. 지정되지 않은 경우 기본값은 8000입니다. |
UDP 유형 | 선택 과목 | 설정하면 서버가 UDP 소켓으로 생성됩니다. 'udp4' 또는 'udp6'은 유효한 값입니다. 기본값은 설정되지 않는 것입니다. udp6을 사용할 때 ::1 과 같이 유효한 IPv6 호스트를 지정해야 합니다. |
콜백 | 선택 과목 | 서버 생성 시 호출되는 함수 |
예제 인수는 순서대로만 있으면 생략할 수 있습니다.
기본 TCP 서버
ipc . serveNet ( ) ;
기본 UDP 서버
ipc . serveNet ( 'udp4' ) ;
또는 콜백으로 TCP 서버 지정
ipc . serveNet (
function ( ) { ... }
) ;
또는 콜백으로 UDP 서버 지정
ipc . serveNet (
'udp4' ,
function ( ) { ... }
) ;
또는 포트를 지정하십시오
ipc . serveNet (
3435
) ;
또는 모든 것을 TCP로 지정
ipc . serveNet (
'MyMostAwesomeApp.com' ,
3435 ,
function ( ) { ... }
) ;
또는 UDP를 모두 지정
ipc . serveNet (
'MyMostAwesomeApp.com' ,
3435 ,
'udp4' ,
function ( ) { ... }
) ;
변하기 쉬운 | 정의 |
---|---|
IPC.의 | 이것은 ipc.connectTo 또는 iupc.connectToNet 통해 클라이언트로 연결할 때 소켓 연결 참조가 저장되는 곳입니다. 이는 생성에 사용된 ID를 기반으로 저장됩니다(예: ipc.of.mySocket). |
ipc.서버 | 이는 ipc.serve 또는 ipc.serveNet 에 의해 생성된 서버에 대한 참조입니다. |
방법 | 정의 |
---|---|
시작 | 서버를 설정하려면 먼저 serve 또는 serveNet 호출해야 합니다. |
멈추다 | 서버를 닫고 서비스를 중단하세요 |
이벤트 이름 | 매개변수 | 정의 |
---|---|---|
오류 | 오류가 발생했습니다. | 오류가 발생했을 때 트리거됨 |
연결하다 | 소켓이 연결될 때 트리거됨 | |
연결을 끊다 | 소켓이 서버에서 연결이 끊어졌을 때 클라이언트에 의해 트리거됨 | |
소켓.연결 끊김 | 소켓 파괴SocketID | 클라이언트 소켓 연결이 끊어졌을 때 서버에 의해 트리거됨 |
파괴하다 | 소켓이 완전히 파괴되면 트리거되며 더 이상 자동 재시도가 발생하지 않으며 모든 참조가 사라집니다. | |
데이터 | 완충기 | ipc.config.rawBuffer가 true이고 메시지가 수신되면 트리거됩니다. |
귀하의 이벤트 유형 | 당신의 이벤트 데이터 | JSON 메시지가 수신되면 트리거됩니다. 이벤트 이름은 메시지의 유형 문자열이 되고 매개변수는 메시지의 데이터 객체가 됩니다. 예: { type:'myEvent',data:{a:1}} |
때로는 node-ipc의 명시적이고 독립적인 인스턴스가 필요할 수도 있습니다. 이러한 시나리오를 위해 우리는 IPC 싱글톤에 핵심 IPC 클래스를 공개했습니다.
import { IPCModule } from 'node-ipc' ;
const ipc = new RawIPC ;
const someOtherExplicitIPC = new RawIPC ;
//OR
const ipc = from 'node-ipc' ) ;
const someOtherExplicitIPC = new ipc . IPC ;
//setting explicit configs
//keep one silent and the other verbose
ipc . config . silent = true ;
someOtherExplicitIPC . config . silent = true ;
//make one a raw binary and the other json based ipc
ipc . config . rawBuffer = false ;
someOtherExplicitIPC . config . rawBuffer = true ;
someOtherExplicitIPC . config . encoding = 'hex' ;
예제 폴더에서 고급 예제를 찾을 수 있습니다. 예제에서는 다중 클라이언트 예제를 포함하여 더 복잡한 데모를 찾을 수 있습니다.
서버는 IPC용 소켓을 열어두는 프로세스입니다. 여러 소켓이 이 서버에 연결되어 통신할 수 있습니다. 또한 모든 클라이언트에 브로드캐스트하거나 특정 클라이언트에 내보낼 수도 있습니다. 이는 로컬 Unix 및 Windows 소켓뿐만 아니라 로컬 또는 원격 네트워크 TCP 소켓에서도 작동하는 가장 기본적인 예입니다.
import ipc from 'node-ipc' ;
ipc . config . id = 'world' ;
ipc . config . retry = 1500 ;
ipc . serve (
function ( ) {
ipc . server . on (
'message' ,
function ( data , socket ) {
ipc . log ( 'got a message : ' . debug , data ) ;
ipc . server . emit (
socket ,
'message' , //this can be anything you want so long as
//your client knows.
data + ' world!'
) ;
}
) ;
ipc . server . on (
'socket.disconnected' ,
function ( socket , destroyedSocketID ) {
ipc . log ( 'client ' + destroyedSocketID + ' has disconnected!' ) ;
}
) ;
}
) ;
ipc . server . start ( ) ;
클라이언트는 프로세스 간 통신을 위해 서버 소켓에 연결합니다. 소켓은 서버에 의해 소켓에 브로드캐스팅되는 이벤트뿐만 아니라 소켓에 특별히 방출된 이벤트도 수신합니다. 이것은 로컬 Unix 소켓과 로컬 또는 원격 네트워크 TCP 소켓 모두에서 작동하는 가장 기본적인 예입니다.
import ipc from 'node-ipc' ;
ipc . config . id = 'hello' ;
ipc . config . retry = 1500 ;
ipc . connectTo (
'world' ,
function ( ) {
ipc . of . world . on (
'connect' ,
function ( ) {
ipc . log ( '## connected to world ##' . rainbow , ipc . config . delay ) ;
ipc . of . world . emit (
'message' , //any event or message type your server listens for
'hello'
)
}
) ;
ipc . of . world . on (
'disconnect' ,
function ( ) {
ipc . log ( 'disconnected from world' . notice ) ;
}
) ;
ipc . of . world . on (
'message' , //any event or message type your server listens for
function ( data ) {
ipc . log ( 'got a message from world : ' . debug , data ) ;
}
) ;
}
) ;
UDP 소켓은 메시지를 수신하려면 해당 컴퓨터의 고유한 포트에 바인딩되어야 하기 때문에 Unix, Windows 및 TCP 소켓과 다릅니다. 예를 들어 TCP, Unix 또는 Windows 소켓 클라이언트는 별도의 TCP, Unix 또는 Windows 소켓 서버에 연결할 수 있습니다. 그런 다음 해당 클라이언트는 서버 포트 또는 위치에서 데이터를 보내고 받을 수 있습니다. UDP 소켓은 이를 수행할 수 없습니다. 데이터를 받거나 보내려면 포트에 바인딩해야 합니다.
이는 데이터를 수신하려면 UDP 소켓에 데이터를 수신할 자체 포트가 있어야 하고 한 번에 하나의 프로세스만 이 포트를 사용할 수 있기 때문에 UDP 클라이언트와 서버가 동일하다는 것을 의미합니다. 이는 또한 데이터를 emit
거나 broadcast
위해 UDP 서버가 데이터를 브로드캐스트하려는 소켓의 호스트와 포트를 알아야 함을 의미합니다.
이는 로컬 및 원격 UDP 소켓 모두에 대해 작동하는 가장 기본적인 예입니다.
import ipc from 'node-ipc' ;
ipc . config . id = 'world' ;
ipc . config . retry = 1500 ;
ipc . serveNet (
'udp4' ,
function ( ) {
console . log ( 123 ) ;
ipc . server . on (
'message' ,
function ( data , socket ) {
ipc . log ( 'got a message from ' . debug , data . from . variable , ' : ' . debug , data . message . variable ) ;
ipc . server . emit (
socket ,
'message' ,
{
from : ipc . config . id ,
message : data . message + ' world!'
}
) ;
}
) ;
console . log ( ipc . server ) ;
}
) ;
ipc . server . start ( ) ;
월드 서버가 이미 기본 ipc.config.networkPort인 8000을 사용하고 있기 때문에 여기서 포트를 8001로 설정했습니다. 따라서 월드가 이를 사용하는 동안에는 8000에 바인딩할 수 없습니다.
ipc . config . id = 'hello' ;
ipc . config . retry = 1500 ;
ipc . serveNet (
8001 ,
'udp4' ,
function ( ) {
ipc . server . on (
'message' ,
function ( data ) {
ipc . log ( 'got Data' ) ;
ipc . log ( 'got a message from ' . debug , data . from . variable , ' : ' . debug , data . message . variable ) ;
}
) ;
ipc . server . emit (
{
address : '127.0.0.1' , //any hostname will work
port : ipc . config . networkPort
} ,
'message' ,
{
from : ipc . config . id ,
message : 'Hello'
}
) ;
}
) ;
ipc . server . start ( ) ;
바이너리 또는 버퍼 소켓은 위 소켓 유형 중 하나와 함께 사용할 수 있지만 데이터 이벤트가 방출되는 방식은 약간 다릅니다. 이는 임베디드 시스템이나 C/C++ 프로세스로 작업하는 경우 유용할 수 있습니다. C 또는 C++ 문자열 입력이 일치하는지 확인할 수도 있습니다.
rawBuffer 소켓을 설정할 때 다음과 같이 지정해야 합니다.
ipc . config . rawBuffer = true ;
인코딩 유형을 지정할 수도 있습니다. 기본값은 utf8
입니다.
ipc . config . encoding = 'utf8' ;
문자열 버퍼 방출:
//server
ipc . server . emit (
socket ,
'hello'
) ;
//client
ipc . of . world . emit (
'hello'
)
바이트 배열 버퍼 방출:
//hex encoding may work best for this.
ipc . config . encoding = 'hex' ;
//server
ipc . server . emit (
socket ,
[ 10 , 20 , 30 ]
) ;
//client
ipc . server . emit (
[ 10 , 20 , 30 ]
) ;
바이너리 또는 16진수 배열 버퍼를 내보냅니다. 이는 특히 C 또는 C++ 프로세스 또는 임베디드 시스템에 연결할 때 실시간 데이터 전송에 가장 적합합니다.
ipc . config . encoding = 'hex' ;
//server
ipc . server . emit (
socket ,
[ 0x05 , 0x6d , 0x5c ]
) ;
//client
ipc . server . emit (
[ 0x05 , 0x6d , 0x5c ]
) ;
C 또는 C++ 프로세스 또는 임베디드 시스템에 연결할 때 명시적 버퍼, int 유형, double, float 등은 물론 빅 엔디안 및 리틀 엔디안 데이터를 원시 버퍼에 기록하는 것은 매우 유용합니다(버퍼와 UInt, Int에 대한 자세한 정보 참조). , double 등은 여기)[https://nodejs.org/api/buffer.html]:
ipc . config . encoding = 'hex' ;
//make a 6 byte buffer for example
const myBuffer = Buffer . alloc ( 6 ) . fill ( 0 ) ;
//fill the first 2 bytes with a 16 bit (2 byte) short unsigned int
//write a UInt16 (2 byte or short) as Big Endian
myBuffer . writeUInt16BE (
2 , //value to write
0 //offset in bytes
) ;
//OR
myBuffer . writeUInt16LE ( 0x2 , 0 ) ;
//OR
myBuffer . writeUInt16LE ( 0x02 , 0 ) ;
//fill the remaining 4 bytes with a 32 bit (4 byte) long unsigned int
//write a UInt32 (4 byte or long) as Big Endian
myBuffer . writeUInt32BE (
16772812 , //value to write
2 //offset in bytes
) ;
//OR
myBuffer . writeUInt32BE ( 0xffeecc , 0 )
//server
ipc . server . emit (
socket ,
myBuffer
) ;
//client
ipc . server . emit (
myBuffer
) ;
cluster
모듈이 있는 서버 node-ipc
Node.js의 클러스터 모듈과 함께 사용하여 단일 소켓에 대해 여러 리더를 갖는 기능을 제공할 수 있습니다. 이렇게 하려면 구성에서 unlink
속성을 false
로 설정하고 마스터 프로세스에서 소켓 경로 연결 해제를 처리하면 됩니다.
import fs from 'fs' ;
import ipc from 'node-ipc' ;
import { cpus } from 'os' ;
import cluster from 'cluster' ;
const cpuCount = cpus ( ) . length ;
const socketPath = '/tmp/ipc.sock' ;
ipc . config . unlink = false ;
if ( cluster . isMaster ) {
if ( fs . existsSync ( socketPath ) ) {
fs . unlinkSync ( socketPath ) ;
}
for ( let i = 0 ; i < cpuCount ; i ++ ) {
cluster . fork ( ) ;
}
} else {
ipc . serve (
socketPath ,
function ( ) {
ipc . server . on (
'currentDate' ,
function ( data , socket ) {
console . log ( `pid ${ process . pid } got: ` , data ) ;
}
) ;
}
) ;
ipc . server . start ( ) ;
console . log ( `pid ${ process . pid } listening on ${ socketPath } ` ) ;
}
import fs from 'fs' ;
import ipc from 'node-ipc' ;
const socketPath = '/tmp/ipc.sock' ;
//loop forever so you can see the pid of the cluster sever change in the logs
setInterval (
function ( ) {
ipc . connectTo (
'world' ,
socketPath ,
connecting
) ;
} ,
2000
) ;
function connecting ( socket ) {
ipc . of . world . on (
'connect' ,
function ( ) {
ipc . of . world . emit (
'currentDate' ,
{
message : new Date ( ) . toISOString ( )
}
) ;
ipc . disconnect ( 'world' ) ;
}
) ;
}
MIT 라이센스 파일을 참조하세요.
죄송합니다.