[javascript] 이벤트 루프와 자바스크립트의 웹 소켓 통신 방식
이번 포스트에서는 이벤트 루프와 웹 소켓을 사용한 효율적인 통신 방식에 대해 알아보겠습니다.
이벤트 루프
자바스크립트는 단일 스레드 언어이기 때문에 이벤트를 비동기적으로 처리해야 합니다. 여러 이벤트가 발생했을 때 이벤트 루프는 이벤트를 순서대로 실행하고, 이벤트 처리가 끝나면 클라이언트로부터 새로운 이벤트를 대기합니다.
이벤트 루프는 실행 스택, 메시지 큐, 백그라운드 및 태스크 큐로 구성됩니다. 실행 스택은 현재 실행 중인 함수의 컨텍스트를 담고 있으며, 메시지 큐는 실행할 콜백 함수를 담고, 백그라운드에서 비동기적으로 실행되는 태스크들을 담습니다.
웹 소켓 통신 방식
웹 소켓은 양방향 통신을 지원하는 프로토콜로, 서버와 클라이언트 간 실시간 데이터를 주고받을 수 있습니다. 이를 통해 실시간 채팅 애플리케이션 등을 개발할 때 매우 유용합니다.
웹 소켓은 HTTP와 달리 지속적인 연결을 제공하며, 이벤트 루프를 통해 비동기적으로 데이터를 주고 받을 수 있습니다.
아래는 웹 소켓을 이용한 기본적인 클라이언트-서버 통신의 예시 코드입니다.
// 웹 소켓 서버
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});
// 웹 소켓 클라이언트
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() {
ws.send('something');
});
ws.on('message', function incoming(data) {
console.log(data);
});
이제 이벤트 루프와 웹 소켓을 이용한 효율적인 통신 방식에 대해 이해하셨을 것입니다.
더 자세한 내용은 MDN 웹 문서를 참고하세요.