간단한 채팅 앱을 구축하여 WebSockets 배우기
본문
WebSocket API는 클라이언트 (사용자 브라우저)와 서버 간에 통신하는 방법입니다. 세션 중에 데이터가 양방향으로 실시간으로 흐를 수 있습니다. 즉, 클라이언트가 서버에 메시지를 보낼 수 있으며 서버는 폴링 할 필요 없이 다시 응답 할 수 있습니다.
열린 채널을 통한 통신은 오래 지속되며 대기 시간이 짧습니다.
https://dev.to/spukas/learn-websockets-by-building-simple-chat-app-dee
WebSockets 완벽한 사용 사례 :
- 채팅 앱
- 앱 추적
- 실시간 청중 상호 작용
- IoT 장치 업데이트
앱 구축
WebSocket이 무엇을 할 수 있는지 더 잘 이해하기 위해 사용자가 실시간으로 메시지를 주고 받을 수 있는 간단한 채팅 앱을 만들어 봅시다.
앱의 경우 다음이 필요합니다.
- Node.js WS 용 WebSocket 라이브러리가 있는 Node.js 서버 설정
- WebSocket 인스턴스로 클라이언트 측 (HTML 및 client.js)을 작성하여 서버에서 메시지를 수신
서버 설정
터미널에서 프로젝트를 초기화하십시오.
npm i -Y && npm i ws && touch server.js
이 명령은 프로젝트를 설정하고 ws 라이브러리를 설치하며 server.js 파일을 작성합니다.
편집기에서 server.js 파일을 열고 서버를 초기화하십시오.
const WebSocket = require('ws');
// starts server instance on http://localhost:8080
const wss = new WebSocket.Server({ port: 8080 });
// waits for connection to be established from the client
// the callback argument ws is a unique for each client
wss.on('connection', (ws) => {
// runs a callback on message event
ws.on('message', (data) => {
// sends the data to all connected clients
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
});
});
클라이언트 설정
메시지를 입력하고 단추를 보내 메시지를 입력하는 간단한 HTML 파일을 작성하십시오. 이러한 파일이 생성 될 위치는 중요하지 않습니다. 함께 있는 한 다른 디렉토리에도 있을 수 있습니다.
<!DOCTYPE html>
<html>
<body>
<div id="chat"></div>
<input id="name" type="text" placeholder="name" />
<input id="message" type="text" placeholder="message" />
<button id="send">Send</button>
<script src="client.js"></script>
</body>
</html>
client.js 파일의 경우 localhost : 8080에서 연결을 청취하도록 지정하여 WebSocket API 인스턴스를 작성합니다.
const connection = new WebSocket("ws://localhost:8080");
WebSocket 인스턴스인 연결에는 광범위한 이벤트 속성 목록이 있습니다. 이 예에서는 클라이언트를 알리지 않고 서버에 메시지를 보내는 데 가장 중요한 것만 사용합니다.
- WebSocket.onopen - 연결이 열릴 때 호출
- WebSocket.onclose - 연결이 닫힐 때 호출
- WebSocket.onerror - 오류가 발생하면 호출
- WebSocket.onmessage - 서버에서 메시지를 받으면 호출
그리고 완전한 client.js 파일은 다음과 같습니다 :
const connection = new WebSocket("ws://localhost:8080");
const button = document.querySelector("#send");
connection.onopen = (event) => {
console.log("WebSocket is open now.");
};
connection.onclose = (event) => {
console.log("WebSocket is closed now.");
};
connection.onerror = (event) => {
console.error("WebSocket error observed:", event);
};
connection.onmessage = (event) => {
// append received message from the server to the DOM element
const chat = document.querySelector("#chat");
chat.innerHTML += event.data;
};
button.addEventListener("click", () => {
const name = document.querySelector("#name");
const message = document.querySelector("#message");
const data = `<p>${name.value}: ${message.value}</p>`;
// Send composed message to the server
connection.send(data);
// clear input fields
name.value = "";
message.value = "";
});
앱 실행
프로젝트 디렉토리 내에서 터미널 실행 명령 node server.js의 별도 브라우저 탭에서 index.html 파일을 두 번 열고 메시지를 보내십시오. 두 클라이언트 인스턴스 모두 서버를 통해 실시간으로 메시지를 수신해야 합니다.
이것으로 튜토리얼을 마치고, 다음 멋진 프로젝트에 WebSocket을 사용하는 방법을 더 잘 이해했으면 합니다.
- 이전글React 및 Express를 사용한 서버 측 렌더링 19.11.09
- 다음글Node.js API를 위한 더 나은 아키텍처 설계 19.11.09