nodejs에서 긴 연결을 구현하는 방법

PHPz
풀어 주다: 2023-04-06 10:36:55
원래의
2237명이 탐색했습니다.

Node.js는 매우 인기 있는 서버 측 JavaScript 런타임 환경입니다. 네트워크 프로그래밍, 특히 장기 연결 구현에 탁월합니다.

네트워크 프로그래밍에서 긴 연결이란 클라이언트와 서버가 하트비트 활동을 유지하고 연결을 닫지 않는 상태를 의미합니다. 전통적인 HTTP 요청-응답 모델과 비교하여 긴 연결은 네트워크 효율성과 시스템 성능을 향상시킬 수 있습니다. 예를 들어, 클라이언트와 서버 사이의 긴 연결을 통해 데이터를 주고받을 때 연결 설정 및 연결 끊김에 따른 오버헤드를 줄일 수 있으며 이로 인한 네트워크 지연 및 시스템 자원 낭비를 피할 수 있습니다.

그렇다면 Node.js에서 긴 연결을 어떻게 구현할까요?

1. WebSocket 사용

WebSocket은 전이중 통신을 달성하기 위해 TCP 프로토콜을 기반으로 구축된 프로토콜입니다. 이는 클라이언트와 서버 사이에 긴 연결을 설정하는 방법을 제공하여 클라이언트 요청-서버 응답 대신 양방향 통신을 가능하게 합니다.

Node.js에서는 ws 라이브러리를 사용하여 WebSocket 연결을 구현할 수 있습니다. 다음은 간단한 WebSocket 예입니다.

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  console.log('client connected');

  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.on('close', function close() {
    console.log('client disconnected');
  });
});
로그인 후 복사

이 예에서는 포트 8080에서 수신 대기하는 WebSocket 서버를 만듭니다. 클라이언트가 서버에 연결되면 WebSocket 서버는 이벤트 핸들러를 통해 연결 콜백 함수를 호출합니다. 이 콜백 함수에서는 클라이언트가 보낸 메시지를 수신하기 위한 메시지 이벤트 핸들러를 등록할 수 있습니다. 그리고 클라이언트 연결이 끊어질 때 처리할 닫기 이벤트 핸들러도 등록했습니다.

2. TCP 소켓 사용

TCP 소켓은 TCP 프로토콜의 소켓 통신을 구현하는 데 사용되는 Node.js의 기본 모듈입니다. Node.js에서는 net 모듈을 사용하여 TCP 소켓을 작동할 수 있습니다.

다음은 간단한 TCP 소켓 예입니다.

const net = require('net');

const server = net.createServer(function(socket) {
  console.log('client connected');

  socket.on('data', function(data) {
    console.log('received: ' + data);
  });

  socket.on('end', function() {
    console.log('client disconnected');
  });
});

server.listen(8080, function() {
  console.log('server started');
});
로그인 후 복사

이 예에서는 포트 8080에서 수신 대기하는 TCP 소켓 서버를 만듭니다. 클라이언트가 서버에 연결되면 로그를 출력한 후 클라이언트가 보낸 데이터를 수신하기 위한 데이터 이벤트 핸들러를 등록합니다. 연결이 끝나면 또 다른 로그를 출력합니다.

3. HTTP 롱 폴링 사용

HTTP 롱 폴링은 웹 애플리케이션에서 긴 연결을 설정하는 기술입니다. 이는 서버가 클라이언트에 데이터를 푸시할 수 있도록 하는 HTTP 프로토콜의 긴 연결 메커니즘을 통해 구현됩니다.

Node.js에서는 HTTP 긴 폴링 연결을 직접 구현할 수 있습니다. 다음은 간단한 HTTP 긴 폴링 예입니다.

const http = require('http');
const messages = [];

http.createServer(function(req, res) {
  console.log('client connected');

  if (req.method === 'POST') {
    let chunks = '';

    req.on('data', function(chunk) {
      chunks += chunk;
    });

    req.on('end', function() {
      messages.push(chunks);
      console.log('message received: ' + chunks);
    });
  } else if (req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'text/plain', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache' });

    let lastMessageIndex = 0;

    function checkForNewMessages() {
      if (lastMessageIndex < messages.length) {
        res.write(messages.slice(lastMessageIndex).join('\n') + '\n');
        lastMessageIndex = messages.length;
      }
    }

    setInterval(checkForNewMessages, 1000);
    checkForNewMessages();
  }
}).listen(8080);
로그인 후 복사

이 예에서는 포트 8080에서 수신 대기하는 HTTP 서버를 만듭니다. 요청 방법(GET 또는 POST)을 확인하여 요청을 긴 폴링 메커니즘으로 변환할 수 있습니다. 긴 폴링 요청에서는 200 응답 코드, Connection 헤더 및 Cache-Control 헤더를 클라이언트에 보내 연결을 유지한다는 것을 나타냅니다. 그런 다음 setInterval 함수와 checkForNewMessages 함수를 사용하여 최신 메시지를 지속적으로 확인하고, 새로운 메시지가 있으면 클라이언트에 보냅니다.

요약

Node.js에서는 WebSocket, TCP 소켓, HTTP 롱 폴링 등 다양한 기술을 사용하여 긴 연결을 구현할 수 있습니다. 구체적인 선택은 애플리케이션 요구사항과 설계에 따라 달라집니다. 물론 더 많은 기능과 유연성을 제공할 수 있는 Socket.IO 등과 같은 다른 고급 기술도 있습니다.

위 내용은 nodejs에서 긴 연결을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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