>  기사  >  웹 프론트엔드  >  Node.js에서 WebSocket 및 실시간 통신 작업

Node.js에서 WebSocket 및 실시간 통신 작업

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-16 12:01:03690검색

Working with WebSocket and Real-Time Communication in Node.js

현대 애플리케이션에서는 특히 실시간 채팅, 알림, 공동 작업 도구와 같은 기능의 경우 실시간 커뮤니케이션이 매우 중요합니다. WebSocket은 단일 장기 연결을 통해 클라이언트와 서버 간의 양방향 통신을 가능하게 하는 프로토콜입니다. 이 기사에서는 WebSocket, Node.js에서의 구현, 실시간 애플리케이션에서 WebSocket 사용을 단순화하는 널리 사용되는 라이브러리인 Socket.IO의 역할을 다룹니다.

WebSocket: 무엇을, 왜, 어떻게?

WebSocket은 HTTP의 지속적인 요청-응답 주기 없이 데이터 교환을 허용하여 지속적인 연결을 유지하는 프로토콜입니다. 일부 사용 사례는 다음과 같습니다.

  • 라이브 메시지 애플리케이션(예: 채팅방)
  • 실시간 업데이트가 필요한 온라인 게임
  • 알림 소셜 미디어 애플리케이션의 이벤트
  • 공동작업 도구(예: Google Docs)

WebSocket 작동 방식

  1. 클라이언트가 서버와 HTTP 연결을 설정합니다.
  2. 서버는 이 연결을 WebSocket 프로토콜로 업그레이드합니다.
  3. 그러면 클라이언트와 서버 모두 이 지속적인 연결을 통해 실시간으로 메시지를 보내고 받을 수 있습니다.

Node.j에서 WebSocket 구현

ws가 포함된 기본 WebSocket 서버

ws 패키지를 사용하여 간단한 WebSocket 서버를 구축해 보겠습니다.

1단계: ws 설치:

npm install ws

2단계: WebSocket 서버 생성:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket) => {
  console.log('Client connected');

  // Listening for messages from the client
  socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    // Echo message back to client
    socket.send(`Server: ${message}`);
  });

  // Handling connection close
  socket.on('close', () => {
    console.log('Client disconnected');
  });
});

console.log('WebSocket server is running on ws://localhost:8080');

3단계: 클라이언트 측에서 연결:

<script>
  const socket = new WebSocket('ws://localhost:8080');

  socket.onopen = () => {
    console.log('Connected to server');
    socket.send('Hello Server!');
  };

  socket.onmessage = (event) => {
    console.log(`Received from server: ${event.data}`);
  };
</script>

Socket.IO 소개: 단순화된 WebSocket 관리

Socket.IO는 실시간 커뮤니케이션을 단순화하고 자동 재접속, 브로드캐스팅 등의 기능을 추가한 라이브러리입니다.

Socket.IO 설치

npm install socket.io

Socket.IO를 사용하여 실시간 채팅 애플리케이션 구축

서버측 구현:

const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = new Server(server);

io.on('connection', (socket) => {
  console.log('A user connected');

  socket.on('chat message', (msg) => {
    // Broadcast message to all connected clients
    io.emit('chat message', msg);
  });

  socket.on('disconnect', () => {
    console.log('User disconnected');
  });
});

server.listen(3000, () => {
  console.log('Server is listening on http://localhost:3000');
});

클라이언트측 구현:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Real-Time Chat</title>
</head>
<body>
  <h1>Chat Room</h1>
  <input>



<h2>
  
  
  Node.js Streams: Efficient Data Handling
</h2>

<p>Node.js streams provide a way to process data piece by piece, which is particularly useful for handling large files.</p>

<h3>
  
  
  Types of Streams
</h3>

<ol>
<li>
<strong>Readable</strong>: For reading data from a source.</li>
<li>
<strong>Writable</strong>: For writing data to a destination.</li>
<li>
<strong>Duplex</strong>: For both reading and writing.</li>
<li>
<strong>Transform</strong>: For modifying or transforming data as it’s read or written.</li>
</ol>

<h3>
  
  
  Example: Reading a Large File with Streams
</h3>



<pre class="brush:php;toolbar:false">const fs = require('fs');

const readStream = fs.createReadStream('largefile.txt', { encoding: 'utf8' });

readStream.on('data', (chunk) => {
  console.log('New chunk received:', chunk);
});

readStream.on('end', () => {
  console.log('File reading completed');
});

Node.js 애플리케이션 확장

Node.js 애플리케이션을 확장하면 더 많은 리소스를 추가하여 증가된 로드를 처리할 수 있습니다.

수평적 확장

  • 애플리케이션 및 로드 밸런싱 요청의 여러 인스턴스를 배포합니다.

수직 확장

  • 더 많은 요청을 처리하려면 서버 성능(CPU, 메모리)을 늘리세요.

NGINX: 로드 밸런싱 및 정적 콘텐츠 제공

NGINX는 로드 밸런싱, 캐싱 및 정적 콘텐츠 제공에 자주 사용되는 웹 서버입니다.

예: NGINX로 정적 파일 제공

  1. NGINX 설치
npm install ws
  1. NGINX 구성

/etc/nginx/sites-available/default 편집:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket) => {
  console.log('Client connected');

  // Listening for messages from the client
  socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    // Echo message back to client
    socket.send(`Server: ${message}`);
  });

  // Handling connection close
  socket.on('close', () => {
    console.log('Client disconnected');
  });
});

console.log('WebSocket server is running on ws://localhost:8080');
  1. NGINX 시작
<script>
  const socket = new WebSocket('ws://localhost:8080');

  socket.onopen = () => {
    console.log('Connected to server');
    socket.send('Hello Server!');
  };

  socket.onmessage = (event) => {
    console.log(`Received from server: ${event.data}`);
  };
</script>

SSL 및 보안

SSL은 클라이언트와 서버 간의 데이터를 암호화하여 보안 계층을 추가합니다. SSL을 설정하려면:

  1. SSL 인증서를 생성하세요(또는 공급자로부터 인증서를 받으세요).
  2. SSL을 사용하도록 NGINX를 구성하세요.
npm install socket.io

결론

이 기사에서는 프로덕션 수준 배포를 위한 Node.js 애플리케이션의 실시간 통신, 효율적인 데이터 처리, 확장 및 보안의 필수 사항을 살펴보았습니다. WebSockets, Socket.IO, NGINX 및 Node.js 스트림은 더 나은 사용자 경험과 확장성을 위해 애플리케이션 상호 작용, 데이터 관리 및 보안을 강화하는 강력한 도구입니다.

위 내용은 Node.js에서 WebSocket 및 실시간 통신 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.