2017년 1월 17일 화요일

[nodejs] nodejs 웹소켓 서버 구현.

nodejs란? 자바스크립트 기반 서버 사이드 스크립트 언어


설치방법은 따로 블로그 하지 않겟다.(매우간단함.)

설치완료 하면 node_modules 라는 폴더가 생성되고 기본 내장 js 모듈 파일들이 존재하며
require 키워드를 통해 어디서든 사용가능 하다.

단 라이브러리를 추가할때는 node_modules 폴더가 존재하는 위치에서 mpn ~~ 을 실행하길 추천한다.
테스트 os 는 윈도우 실제 적용환경은 리눅스(centOS) 였음.
아래 코드는 각각의 OS 에서 정상작동한다.

서버코드.

//websocket 객체 생성 (npm 으로 라이브러리를 추가해야한다.)
var WebSocketServer = require('websocket').server;
//http 객체 생성
var http = require('http');

//nodejs 는 스크립트 오류가 발생시 프로세스가 종료된다. 따라서 예외처리는 필수
try{
        //http 객체로부터 서버를 생성한다.
        var server = http.createServer(function (req, res) {
                //이부분은 알아서~변경
                res.writeHead(404);
res.end();
});
        //서버포트를 설정한다. 8887번포트 리슨대기 상태
        server.listen(8887, function () {

});
     
        //websocket 웹소캣 객체생성자에 위에서 생성한 server 객체를 httpServer
        //값에 셋팅 한다.
wsServer = new WebSocketServer({
httpServer: server,
autoAcceptConnections: false
});
     

        //웹소캣 이벤트 정의
wsServer.on('request', function (request) {
               

                //이부분에서 좀 해맷다. CP의 폐해
                //accept 함수 첫번째 인자 값에 연결 데이터방식에 대한 정의가 필요한듯.
                //null 일경우 모든 client 전송 데이터 연결 허용.
                //특정문자열을 입력하여 제한가능 한걸로 보임
var connection = request.accept(null, request.origin);

                //메세지 수신 이벤트
connection.on('message', function (message) {

                        //String 형태로 넘어온데이터 처리
if (message.type === 'utf8') {
     //로직
                             //ex) 헬로라는 문자열을 사용자에게 출력.
                             connection.send('hello');
                        //바이너리 데이터 처리
}else if (message.type === 'binary') {
     //로직
                        }else{
             //로직
}

});

                //사용자가 연결을 끊엇을때 이벤트 처리
connection.on('close', function (reasonCode, description) {

});
});

}catch(exception){

}

nodejs 기본 제공 하는 socket.io 기술을 사용해서 구현도 가능 하지만 클라이언트 단에
관련라이브러리 js 파일을 넣어줘야한다.

위 기본 형태는 서버와 클라이언트 1:1 통신 이며 서버가 클라이언트 들에게 모두 중개 해야하는 입장이라면 추가로직이 필요할것이다.



클라이언트 코드.


var ws = new WebSocket('ws://아이피:포트');

(ssl 적용관련 설명은 따로 올릴예정)

//웹소켓을 기본적으로 하는 미지원 브라우저도 존재한다.
if('WebSocket' in window){

ws.onopen=function(e){
console.log(e);
console.log("onopen");
}
ws.onclose=function(e){
                console.log(e);
console.log("onclose");
}
ws.onerror=function(e){
                console.log(e);
console.log("onerror");
}
ws.onmessage = function (evt) {
                console.log(e);
console.log("onerror");
};

}else{
console.log("WebSocket not supported.");
}


댓글 없음:

댓글 쓰기

[lunux]리눅스 폴더별 용량 확인

리눅스 폴더별 용량 확인 조회 하고자 하는 디렉토리 리스트가있는 경로로 이동후 du -h --max-depth=1