> 웹 프론트엔드 > 프런트엔드 Q&A > nodejs 소켓 연결 닫기

nodejs 소켓 연결 닫기

WBOY
풀어 주다: 2023-05-24 10:04:20
원래의
1398명이 탐색했습니다.

Node.js에서 네트워크 통신을 위해 소켓을 사용하는 것은 일반적인 관행이며 웹 서버 및 클라이언트 애플리케이션을 구축하는 데 자주 사용됩니다. 그러나 네트워크 통신 중에 소켓 연결을 닫아야 하는 경우가 있습니다. 이 기사에서는 Node.js를 사용하여 소켓 연결 닫힘을 관리하는 방법을 소개합니다.

1. 소켓 연결을 종료하는 이유

소켓 연결을 종료한다는 것은 연결 당사자 모두가 설정한 규칙에 따라 연결을 종료하는 것을 의미합니다. 소켓이 연결을 닫는 이유는 다음과 같습니다.

  1. 클라이언트가 연결을 닫습니다

클라이언트 애플리케이션이 더 이상 서버와 통신할 필요가 없으면 적극적으로 소켓 연결을 닫을 수 있습니다. 예를 들어 사용자가 클라이언트 애플리케이션에서 로그아웃하거나 종료하는 경우 또는 클라이언트 애플리케이션이 모든 작업을 완료하는 경우입니다.

  1. 서버가 연결을 닫습니다

서버가 소켓 연결이 더 이상 필요하지 않다는 것을 감지하면 연결을 닫도록 선택할 수 있습니다. 예를 들어 서버가 오랫동안 응답하지 않는 클라이언트를 발견하거나 연결이 비정상적인 것을 발견한 경우입니다.

  1. Socket 전송 오류

Socket은 기본적으로 TCP/IP 프로토콜 기반의 데이터 스트림입니다. 다른 네트워크 전송 방법과 마찬가지로 Socket을 사용하면 연결이 중단되거나 끊어지는 등 전송 오류가 발생할 수 있습니다. 이 경우 소켓 연결도 자동으로 닫힙니다.

2. 소켓 연결을 닫는 방법

Node.js에서는 다음 방법을 사용하여 소켓 연결을 닫을 수 있습니다.

  1. end() 메서드

end() 메서드를 사용하여 쓰기를 닫을 수 있습니다. 끝. 소켓의 쓰기 쪽이 닫히면 더 이상 데이터가 소켓으로 전송되지 않지만 읽기 쪽에서는 소켓도 닫힐 때까지 계속 데이터를 받을 수 있습니다. end() 메서드를 사용할 때 데이터 블록이 전송된 후 연결이 닫히도록 전송할 마지막 데이터 블록을 전달하도록 선택할 수 있습니다.

예:

const net = require('net');

const server = net.createServer((socket) => {
  // 处理连接
  // ...

  // 关闭写入端
  socket.end('Goodbye
');
});

server.listen(8080);
로그인 후 복사

클라이언트가 "Goodbye"를 수신하면 연결이 자동으로 종료됩니다.

  1. destroy() 메서드

destroy() 메서드는 현재 전송 상태에 관계없이 즉시 소켓 연결을 닫는 데 사용할 수 있습니다. 소켓 연결이 빠르게 닫히면 작성자나 판독기 모두 더 이상 전송 작업을 수행할 수 없습니다. destroy() 메소드를 사용하는 경우 데이터 전송 중단이나 불완전한 데이터 전송을 방지하기 위해 현재 소켓 상태 및 전송 데이터에 주의해야 합니다.

예:

const net = require('net');

const server = net.createServer((socket) => {
  // 处理连接
  // ...

  // 销毁连接
  socket.destroy();
});

server.listen(8080);
로그인 후 복사

destroy() 메소드를 사용할 경우 전송 과정에서 오류가 발생할 수 있으므로 오류 핸들러를 추가해야 합니다.

const net = require('net');

const server = net.createServer((socket) => {
  // 处理连接
  // ...

  // 销毁连接
  socket.destroy();

  socket.on('error', (err) => {
    console.log(`Socket 错误:${err}`);
  });
});

server.listen(8080);
로그인 후 복사

또한 또 다른 일반적인 소켓 닫기 방법은 destroySoon() 메서드를 사용하는 것입니다. 이 메소드는 end() 메소드와 유사하지만 나머지 데이터가 전송될 때까지 기다리지 않고 즉시 연결을 닫습니다. 그러나 이 방법은 항상 신뢰할 수 있는 것은 아니므로 가능하면 end() 또는 destroy() 메서드를 사용하는 것이 좋습니다.

3. 요약

소켓 연결을 닫는 것은 네트워크 통신의 필수적인 부분입니다. Node.js에서는 end() 및 destroy() 메서드를 사용하여 연결을 닫을 수 있습니다. 이를 사용할 때 연결 중단이나 데이터 손실을 방지하려면 현재 소켓 상태와 전송 중인 데이터 블록에 주의해야 합니다. 동시에 연결을 닫을 때 오류를 적시에 감지하고 처리하려면 오류 처리기를 추가해야 합니다.

위 내용은 nodejs 소켓 연결 닫기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿