백엔드 통신 디자인 패턴 - 푸시(Push)

푸시 모델 개요

푸시 모델의 장단점

장점

단점

웹소켓을 이용한 푸시 구현 예제

서버 측 코드

const http = require("http");
const WebSocketServer = require("websocket").server;

let connections = [];

// HTTP 서버를 생성합니다.
const httpserver = http.createServer()

 // 모든 작업을 수행하기 위해 WebSocketServer 라이브러리에 httpserver 객체를 전달하면, 이 클래스가 req/res를 재정의합니다. 
const websocket = new WebSocketServer({
	"httpServer": httpserver 
});

//listen on the TCP socket
httpserver.listen(8080, () => {
	console.log("My server is listening on port 8080")
})


// 정상적인 웹소켓 요청이 오면, 연결을 받습니다. 
websocket.on("request", request => {
    const connection = request.accept(null, request.origin);
    connection.on("message", message => {
        // 메시지가 도착하면 모든 사람에게 메시지를 보냅니다.
        connections.forEach (c => c.send(`User${connection.socket.remotePort} says: ${message.utf8Data}`));
    });
    
    connections.push(connection);
    
    // 누군가 방금 연결되면 모든 사람에게 알려줍니다.
    connections.forEach (c => {
	    c.send(`User${connection.socket.remotePort} just connected.`)
    });
})

클라이언트 측 코드

let ws = new WebSocket("ws://localhost:8080");

ws.onmessage = message => {
	console.log(`Received: ${message.data}`);
}

ws.send("Hello! I'm client")

주의사항