전체 코드는 다음과 같습니다.

    코드 6-12 Distributor 전체 코드

    예제 파일 : distributor.js

    'use strict'
    
    /*
     * distributor
     */
    // 접속 노드 관리 오브젝트
    var map = {};
    
    // Server 클래스 상속
    class distributor extends require('./server.js') {
        constructor() {
            super("distributor", 9000, ["POST/distributes", "GET/distributes"]);
        }
    
        // 노드 접속 이벤트 처리
        onCreate(socket) {
            console.log("onCreate", socket.remoteAddress, socket.remotePort);
            this.sendInfo(socket);
        }
    
        // 노드 접속 해제 이벤트 처리
        onClose(socket) {
            var key = socket.remoteAddress + ":" + socket.remotePort;   
            console.log("onClose", socket.remoteAddress, socket.remotePort);
            delete map[key];
            this.sendInfo();
        }
    
        // 노드 등록 처리
        onRead(socket, json) {
            var key = socket.remoteAddress + ":" + socket.remotePort;   
            console.log("onRead", socket.remoteAddress, socket.remotePort, json);
            
            if (json.uri == "/distributes" && json.method == "POST") {
                map[key] = {
                    socket: socket
                };
                map[key].info = json.params;
                map[key].info.host = socket.remoteAddress;          
                this.sendInfo();
            }
        }
        
        // 패킷 전송
        write(socket, packet) {
            socket.write(JSON.stringify(packet) + '¶');
        }
    
        // 접속 노드 혹은 특정 소켓에 접속 노드 정보 전파
        sendInfo(socket) {
            var packet = {
                uri: "/distributes",
                method: "GET",
                key: 0,
                params: []
            };
    
            for (var n in map) {
                packet.params.push(map[n].info);
            }
    
            if (socket) {
                this.write(socket, packet);
            }
            else {
                for (var n in map) {
                    this.write(map[n].socket, packet);
                }
            }
        }
    }
    
    // distributor 객체 생성
    new distributor();

    분산 아키텍처의 핵심적인 역할을 수행하는 Distributor를 구현했습니다. 이제 Distributor와 연동되는 상품 관리, 회원 관리, 구매 관리 마이크로서비스를 구현하겠습니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.