net 모듈

이수정·2025년 9월 16일

JS_웹_풀스택

목록 보기
6/12

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

  • new net.SocketAddress([options])
    - address : IPv4/v6 문자열

    • family : 'ipv4'/'ipv6'
    • flowlabel : ipv6인 경우 사용하는 숫자
    • port
  • socketaddres.adress

  • socketaddres.family

  • socketaddres.flowlabel

  • socketaddres.port

  • SocketAddress.parse(intput)
    - input : ip주소와 포트 포함하는 문자열

    • 리턴 : SocketAddress 반환 / undefined

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'이벤트 발생 시 닫힘

serverSymbol.asyncDispose

  • 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)
    • default : 511
  • 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,
});
// Later, when you want to close the server.
controller.abort();

net.Socket은 다음에 필요할 때 공부

  • net.connect()
  • net.createConnection()
    ...

0개의 댓글