더북(TheBook)

서버의 기본 기능인 리슨, 데이터 수신, 클라이언트 접속 관리 기능을 추가합니다.

코드 6- 6 서버 기능 추가

예제 파일 : server.js

'use strict';

const net = require('net');
const tcpClient = require('./client.js');

class tcpServer {
    constructor(name, port, urls) {                  // ➊ 생성자

        this.context = {                             // ➋ 서버 정보
            port: port,
            name: name,
            urls: urls
        }
        this.merge = {};
        this.server = net.createServer((socket) => { // ➌ 서버 생성
            this.onCreate(socket);                   // ➍ 클라이언트 접속 이벤트 처리
            socket.on('error', (exception) => {      // ➎ 에러 이벤트 처리
                this.onClose(socket);
            });
            socket.on('close', () => {               // ➏ 클라이언트 접속 종료 이벤트 처리
                this.onClose(socket);
            });
            socket.on('data', (data) => {            // ➐ 데이터 수신 처리
                var key = socket.remoteAddress + ":" + socket.remotePort;
                var sz = this.merge[key] ? this.merge[key] + data.toString() :
                                         data.toString();
                var arr = sz.split('¶');
                for (var n in arr) {
                    if (sz.charAt(sz.length - 1) != '¶' && n == arr.length - 1) {
                        this.merge[key] = arr[n];
                        break;
                    } else if (arr[n] == "") {
                        break;
                    } else {
                        this.onRead(socket, JSON.parse(arr[n]));
                    }
                }
            });
        });
                
        this.server.on('error', (err) => {           // ➑ 서버 객체 에러 처리
            console.log(err);
        });
        this.server.listen(port, () => {             // ➒ 리슨
            console.log('listen', this.server.address());
        });
    }
        
    onCreate(socket) {
        console.log("onCreate", socket.remoteAddress, socket.remotePort);
    }
        
    onClose(socket) {
        console.log("onClose", socket.remoteAddress, socket.remotePort);
    }
}
module.exports = tcpServer;
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.