Node.js는 매우 인기 있는 서버 측 JavaScript 런타임 환경입니다. 네트워크 프로그래밍, 특히 장기 연결 구현에 탁월합니다.
네트워크 프로그래밍에서 긴 연결이란 클라이언트와 서버가 하트비트 활동을 유지하고 연결을 닫지 않는 상태를 의미합니다. 전통적인 HTTP 요청-응답 모델과 비교하여 긴 연결은 네트워크 효율성과 시스템 성능을 향상시킬 수 있습니다. 예를 들어, 클라이언트와 서버 사이의 긴 연결을 통해 데이터를 주고받을 때 연결 설정 및 연결 끊김에 따른 오버헤드를 줄일 수 있으며 이로 인한 네트워크 지연 및 시스템 자원 낭비를 피할 수 있습니다.
그렇다면 Node.js에서 긴 연결을 어떻게 구현하나요?
1. WebSocket 사용
WebSocket은 전이중 통신을 달성하기 위해 TCP 프로토콜을 기반으로 구축된 프로토콜입니다. 이는 클라이언트와 서버 사이에 긴 연결을 설정하는 방법을 제공하여 클라이언트 요청-서버 응답 대신 양방향 통신을 가능하게 합니다.
Node.js에서는 ws 라이브러리를 사용하여 WebSocket 연결을 구현할 수 있습니다. 다음은 간단한 WebSocket 예입니다.
<code>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'); }); });</code>
이 예에서는 포트 8080에서 수신 대기하는 WebSocket 서버를 만듭니다. 클라이언트가 서버에 연결되면 WebSocket 서버는 이벤트 핸들러를 통해 연결 콜백 함수를 호출합니다. 이 콜백 함수에서는 클라이언트가 보낸 메시지를 수신하기 위한 메시지 이벤트 핸들러를 등록할 수 있습니다. 그리고 클라이언트 연결이 끊어질 때 처리할 닫기 이벤트 핸들러도 등록했습니다.
2. TCP 소켓 사용
TCP 소켓은 TCP 프로토콜의 소켓 통신을 구현하는 데 사용되는 Node.js의 기본 모듈입니다. Node.js에서는 net 모듈을 사용하여 TCP 소켓을 작동할 수 있습니다.
다음은 간단한 TCP 소켓 예입니다.
<code>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'); });</code>
이 예에서는 포트 8080에서 수신 대기하는 TCP 소켓 서버를 만듭니다. 클라이언트가 서버에 연결되면 로그를 출력한 후 클라이언트가 보낸 데이터를 수신하기 위한 데이터 이벤트 핸들러를 등록합니다. 연결이 끝나면 또 다른 로그를 출력합니다.
3. HTTP 롱 폴링 사용
HTTP 롱 폴링은 웹 애플리케이션에서 긴 연결을 설정하는 기술입니다. 이는 서버가 클라이언트에 데이터를 푸시할 수 있도록 하는 HTTP 프로토콜의 긴 연결 메커니즘을 통해 구현됩니다.
Node.js에서는 HTTP 긴 폴링 연결을 직접 구현할 수 있습니다. 다음은 간단한 HTTP 긴 폴링 예입니다.
<code>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);</code>
이 예에서는 포트 8080에서 수신 대기하는 HTTP 서버를 만듭니다. 요청 방법(GET 또는 POST)을 확인하여 요청을 긴 폴링 메커니즘으로 변환할 수 있습니다. 긴 폴링 요청에서는 200 응답 코드, Connection 헤더 및 Cache-Control 헤더를 클라이언트에 보내 연결을 유지한다는 것을 나타냅니다. 그런 다음 setInterval 함수와 checkForNewMessages 함수를 사용하여 최신 메시지를 지속적으로 확인하고, 새로운 메시지가 있으면 클라이언트에 보냅니다.
요약
Node.js에서는 WebSocket, TCP 소켓, HTTP 롱 폴링 등 다양한 기술을 사용하여 긴 연결을 구현할 수 있습니다. 구체적인 선택은 애플리케이션 요구사항과 설계에 따라 달라집니다. 물론 더 많은 기능과 유연성을 제공할 수 있는 Socket.IO 등과 같은 다른 고급 기술도 있습니다.
위 내용은 nodejs 긴 연결을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!