이제 접속한 노드 정보를 저장하는 기능을 만들어 보겠습니다.
코드 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 오브젝트에 저장합니다(➌). 이때 노드에서 전달받은 정보 이외에 호스트 정보도 추가합니다. 저장이 완료되면 접속된 모든 노드에 최신 정보를 전파합니다(➍).