Node.UNIX 도메인 소켓을 사용하고 싶습니다.
8996 단어 Node.jsTypeScriptNetsocketIPC
입문
Node.js가 사용할 수 있는 통신 방식은 TCP 플러그인, 유동식 IPC 단점과 HTTP 인터페이스가 있다.HTTP 인터페이스는 TCP 콘센트로 실제로 이동되기 때문에 사실상 앞의 두 개이다.
그렇다면 TCP 소켓과 유동식 IPC 단점은 어떤 차이가 있습니까?
TCP 소켓은 TCP/IP에서 소켓을 사용하여 통신하는 방식입니다.
한편, 유동식 IPC 단점은 IPC(InterProcess Communication)에서 같은 기계에서 유동식 전송을 통해 프로세스 간 통신을 하는 통신 방식이다.
유닉스에서 이 유동식 IPC 단점을 실현하는 기술은'유닉스 도메인 소켓'이다.
UNIX 도메인 소켓이란 무엇입니까?
로컬에서 열린 플러그인 파일을 통해 서버 측과 클라이언트가 통신하는 방법
Node.js에서는 사용할 수 없지만 일반적으로 unix://
에서 URL이 시작됩니다.
TCP와 달리 로컬 파일을 지정하여 통신하기 때문에 도메인 해결 및 외부 통신을 하지 않습니다.
따라서 TCP보다 빠릅니다.
그 검증에 관해서는 보십시오Performance Analysis of Various Mechanisms for Inter-process Communication.
한번 써보세요!이 문장의 견본 프로그램unix-domain-socket에서.
UNIX 도메인 소켓은 Node입니다.js의 구축 모듈net
에서 제공합니다.
따라서 이 글은 주로 net
을 사용하여 프로그램을 쓴다.
Net | Node.js
송신자
다음 프로그램을 만들었습니다.import net from 'net';
// UNIXドメインソケットのコネクションを作成する
// net.createConnectionの引数にファイルを指定するとUNIXドメインソケットで繋がる
const client = net.createConnection('/tmp/unix.sock');
client.on('connect', () => {
console.log('connected.');
});
client.on('data', (data) => {
console.log(data.toString());
});
client.on('end', () => {
console.log('disconnected.');
});
client.on('error', (err) => {
console.error(err.message);
});
client.write('hello');
수신단
다음 프로그램을 만들었습니다.import net from 'net';
import fs from 'fs';
// サーバーを設定
const server = net.createServer((connection) => {
console.log('connected.');
connection.on('close', () => {
console.log('disconnected.');
});
connection.on('data', (data) => {
console.log(data.toString());
});
connection.on('error', (err) => {
console.error(err.message);
});
connection.write('unix domain socket');
connection.end();
});
// ソケットファイルを削除(存在するとlistenできない)
try {
fs.unlinkSync('/tmp/unix.sock');
} catch (error) {}
// UNIXドメインソケットでlistenする
server.listen('/tmp/unix.sock');
실행해 보다
모두 동일한 가상 서버에서 실행됩니다.
왼쪽은 발송자, 오른쪽은 수신자.
끝내다
이 UNIX 도메인 소켓은 로컬 컴퓨터에서 프로세스 간에 통신할 때 사용할 수 있습니다.
예를 들어, Kubernetes의 Pod 내의 컨테이너 간에 통신할 때 사용할 수 있습니다.
볼륨을 공유하고 마운트하면 도메인 이름 해석에 얽매이지 않고 통신할 수 있습니다.
포트에서 통신하는 것에 비하면 제한을 받지 않는 부분도 있으니 한번 사용해 보는 것은 어떨까요?
Reference
이 문제에 관하여(Node.UNIX 도메인 소켓을 사용하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/walk8243/items/49ce3fc24500038f126f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import net from 'net';
// UNIXドメインソケットのコネクションを作成する
// net.createConnectionの引数にファイルを指定するとUNIXドメインソケットで繋がる
const client = net.createConnection('/tmp/unix.sock');
client.on('connect', () => {
console.log('connected.');
});
client.on('data', (data) => {
console.log(data.toString());
});
client.on('end', () => {
console.log('disconnected.');
});
client.on('error', (err) => {
console.error(err.message);
});
client.write('hello');
import net from 'net';
import fs from 'fs';
// サーバーを設定
const server = net.createServer((connection) => {
console.log('connected.');
connection.on('close', () => {
console.log('disconnected.');
});
connection.on('data', (data) => {
console.log(data.toString());
});
connection.on('error', (err) => {
console.error(err.message);
});
connection.write('unix domain socket');
connection.end();
});
// ソケットファイルを削除(存在するとlistenできない)
try {
fs.unlinkSync('/tmp/unix.sock');
} catch (error) {}
// UNIXドメインソケットでlistenする
server.listen('/tmp/unix.sock');
이 UNIX 도메인 소켓은 로컬 컴퓨터에서 프로세스 간에 통신할 때 사용할 수 있습니다.
예를 들어, Kubernetes의 Pod 내의 컨테이너 간에 통신할 때 사용할 수 있습니다.
볼륨을 공유하고 마운트하면 도메인 이름 해석에 얽매이지 않고 통신할 수 있습니다.
포트에서 통신하는 것에 비하면 제한을 받지 않는 부분도 있으니 한번 사용해 보는 것은 어떨까요?
Reference
이 문제에 관하여(Node.UNIX 도메인 소켓을 사용하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/walk8243/items/49ce3fc24500038f126f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)