더북(TheBook)

이제 접속한 노드 정보를 저장하는 기능을 만들어 보겠습니다.

코드 6-11 노드 정보 등록

예제 파일 : distributor.js

......
    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) + '¶');
    }
......

노드에서 데이터를 수신하면 onRead 함수를 호출합니다(). 소켓 정보에서 호스트 정보와 포트 정보를 획득해 키를 만들어() map 오브젝트에 저장합니다(). 이때 노드에서 전달받은 정보 이외에 호스트 정보도 추가합니다. 저장이 완료되면 접속된 모든 노드에 최신 정보를 전파합니다().

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