node:net 공식문서
net.js
- stable : 2
: npm 호환성 최우선 안정적
node:net 모듈 : TCP 또는 IPC(net.createServer() & net.createConnection())를 생성하기 위한 비동기 네트워크 API
const net = require('node:net');
IPC 지원
Unix 도메인 소켓 사용한 IPC
- net.connect()
- net.createConnection()
- server.listen()
- socket.connect()
경로 : 파일 시스템 경로 이름
- sizeof(sockaddr_un.sun_path 보다 길면 오류)
Node.js API : 유닉스 도메인 소켓 생성/해제 가능
- net.createServer()
- server.close()
링크 해제시 까지 지속
net.createServer().listen(
path.join('\\\\?\\pipe', process.cwd(), 'myctl'));
escape 사용
net.SocketAddress
net.Server
- new net.Server([options],[connectionListener]_
- options
- connection 이벤트 리스너 자동 설정
- 리턴 : net.server
- Event
- Event Emitter
- close
- connnection
- error
- listening
- drop : connection 수가 일정 값에 도달시 새 연결 끊으면서 발생하는 이벤트
- localAddress
- localPort
- localFamily
- remoteAddress
- remotePort
- remoteFamily
server.address()
- 리턴 : address, family, port 반환
- { port: 12346, family: 'IPv4', address: '127.0.0.1' }
server.close([callback])
- callback : 서버 닫힐 때 한 번 호출
- 리턴 : net.Server
- 서버가 새 연결 안하고 기존 연결 유지
- 비동기 => 모든 연결 종료, 'close'이벤트 발생 시 닫힘
- server.close() 호출
- 리턴 : 서버가 닫히면 promise
server.getConnections(callback)
- return : net.Server
- 서버 동시 연결 수를 비동기적으로 가져옴
- callback : err,count 인수로 가짐
server.listen()
- 수신 대상에 따라 TCP / IPC
- 비동기
- 서버 listening 시작하면 listening 이벤트 발생
- backlog : 보류 연결 큐의 최대 길이
- OS가 지정 (tcp_max_syn_backlog, somaxconn)
- EADDRINUSE : 다른 서버가 요청된 PORT/PATH/HANDLE를 이미 수신 대기하고 있을 때 발생 -> 그낭 재시도
server.on('error', (e) => {
if (e.code === 'EADDRINUSE') {
console.error('Address in use, retrying...');
setTimeout(() => {
server.close();
server.listen(PORT, HOST);
}, 1000);
}
});
- server.listen(handle[, backlog][, callback])
- handle 객체 : 서버/ 소켓/ file descripter (not for Windows)
- server.listen(options[, callback])
- options
- backlog
- exclusive : true) handle 공유되지 않음 (cluster workers) => default:false
- host
- ipv6Only [tcp]
- reusePort [tcp]
- path : 1과 같이 동작
- port : 2와 같이 동작
- readableAll [ipc]
- signal(AbortSignal) .abort() ~== .close()
- writeableAll [ipc]
- 1) server.listen(path[, backlog][, callback]) for IPC servers
- 2) server.listen([port[, host[, backlog]]][, callback]) for TCP servers
const controller = new AbortController();
server.listen({
host: 'localhost',
port: 80,
signal: controller.signal,
});
controller.abort();
net.Socket은 다음에 필요할 때 공부
- net.connect()
- net.createConnection()
...