SW 개발

Programming / node.js / 자바스크립트로된 서버프로그램

. . . 2011. 10. 26. 10:08
반응형

서버프로그램1 예제

  • 예제소스1 : http://blog.new-bamboo.co.uk/2009/12/7/real-time-online-activity-monitor-example-with-node-js-and-websocket

서버프로그램2 예제

직접 짠 코드..

그냥 간단히 tcp 통신 테스트용으로 짰다. (1분에 몇번씩 통신이 이뤄지나 확인용)

실행방법은 간단하다. windows 용 node.exe 를 다운받고 node.exe example.js 이런식으로 실행하면 끝!

example.js

function printTimeWithLog(log_string){
    var currentTime = new Date();

    var currentHour = currentTime.getHours();
    if(currentHour < 10){ 
        currentHour="0" + currentHour ;
    }

    var currentMin = currentTime.getMinutes();
    if(currentMin < 10){ 
        currentMin="0" + currentMin ;
    }

    var currentSec = currentTime.getSeconds();
    if(currentSec < 10){ 
        currentSec="0" + currentSec ;
    }

    var currentMilsec = currentTime.getMilliseconds();
    if(currentMilsec < 10){ 
        currentMilsec="00" + currentMilsec ;
    }
    else if(currentMilsec < 100) {
        currentMilsec="0" + currentMilsec ;
    }

    console.log('[' + currentHour + ':' + currentMin+ ':' + currentSec + ':' + currentMilsec + '] ' + log_string);
}

// Load the net module to create a tcp server.
var net = require('net');
var timeCalc;
var receiveDataCnt = 0;

var receiveDataRead = 0;
var curReceiveDataRead = 0;

function calcTotalReceive(){
    setTimeout(function () {
        printTimeWithLog("receive total count : " + receiveDataCnt);
        printTimeWithLog("receive total size (byte) : " + (curReceiveDataRead - receiveDataRead));
        //process.exit(0);
        receiveDataRead = curReceiveDataRead;
        receiveDataCnt = 0;

        calcTotalReceive(); // timer reset
        }, 60 * 1000);
}

var test=0;

// Setup a tcp server
var server = net.createServer(function (socket) {
    // Every time someone connects, tell them hello and then close the connection.

    socket.addListener("connect", function () {
        printTimeWithLog("Connection from " + socket.remoteAddress);
        //socket.write("hello!");
        //socket.end("Hello World\n");
        //socket.end();
        receiveDataCnt = 0;
        receiveDataRead = curReceiveDataRead = 0;
        calcTotalReceive();
    });

    socket.addListener("receive", function (data)  {
        //printTimeWithLog("receive from " + socket.remoteAddress + ":" + data);
        receiveDataCnt ++;
        curReceiveDataRead = socket.bytesRead;
        //printTimeWithLog("receive total " + receiveDataCnt);
    });

    socket.addListener("data", function (data)  {
        //printTimeWithLog("receive from " + socket.remoteAddress + ":" + data);
        //socket.write(data);
        receiveDataCnt ++;
        curReceiveDataRead = socket.bytesRead;
        if (test%2)
            console.log('.');
        else
            console.log('*');
        test++;
        //printTimeWithLog("receive total " + receiveDataCnt);
    });

    socket.addListener("close", function () {
        printTimeWithLog("close from " + socket.remoteAddress);
        //socket.write("goodbye\r\n");
        //socket.close();
    });

    socket.addListener("eof", function () {
        printTimeWithLog("eof from " + socket.remoteAddress);
        socket.write("goodbye\r\n");
        socket.close();
    });

});



server.listen(8000,'192.168.1.3');

printTimeWithLog('create server... wait for connect');

개인적인생각

싱글쓰래드 기반 의 비동기 io 이벤트 방식으로 속도 및 리소스 측면에서 유리하단건 개인적인 테스트입장에서는 별로 채감하지 못하겠다.

하지만 개발자 측면의 장점은...

각종 테스트용 서버프로그램을 짤때.. 컴파일 없이 바로 script 를 구현하여 서버를 구축할수있다니 얼마나 간단한 일인가?!?!

서버 프로그램을 수정하여 재컴파일 할필요도 없고, 그냥 스크립트만 수정하여 돌리면 되니 말이다.

어째튼 node.js 는 새로운 트랜드이라고 하니 한번 맛뵈기로 사용해보는것도 좋을듯하다.

반응형