2017년 10월 9일 월요일

[nodejs] express 프레임 워크 사용방법 및 socket.io. 셋팅하기.

일단 검색하여 이클립스 + nodejs 개발환경을 구축한다.


express 프로젝트 를 생성하면 자동적으로 app.js 가 생성되고 아래 코드가 있다.

아래 코드를 좀 훓어보면...

/**
 * Module dependencies.
 */

//익스프레스에선 기본적으로 require.js 를 사용하여 의존 모듈을 선언한다.
var express = require('express')  //express 프레임 워크 사용 정의
  , routes = require('./routes')    //현재 프로젝트 경로에 라우터 폴더 변수 설정.
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);       //포트 설정
app.set('views', __dirname + '/views');           //__dirname 은 현재파일이 위치한 폴더 경로
app.set('view engine', 'jade');                      //jade 템플릿 사용선언.
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());                    //post 전송 데이터 파싱을 위한 바디파서
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));  //정적 리소스 위치 설정.

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);              //요청별 라우터 매핑.
app.get('/users', user.list);

//서버 생성.
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});


기본적인 프로젝트 구조및 라우터 설정을 미리 잡아준다. 

이제 socekt.io 를 사용하기 위해서 프로젝트 경로에서

npm install --save socket.io 로 다운받는다.
 --save 는 package.json 파일에 등록되어 나중에 개별 다운로드 할필요없이 npm install 을 통해서 정의된 라이브러리등을 받을수 있도록 해준다.

package.json 파일을 보면 socket.io 가 설치된것을 확인 할수 있다.

  "dependencies": {
    "JSON": "^1.0.0",
    "connect-redis": "^3.3.2",
    "cookie-parser": "^1.4.3",
    "express": "3.2.6",
    "hashmap": "^2.3.0",
    "ioredis": "^3.1.4",
    "jade": "*",
    "node-mysql": "^0.4.2",
    "node-mysql-transaction": "^0.2.1",
    "redis": "^2.8.0",
    "redis-hash": "0.0.4",
    "redis-jsonify": "^1.0.1",
    "socket.io": "1.4.8",
    "socket.io-redis": "^5.2.0"
  }

나중에 프로젝트가 이동 되거나 새로 구축을 해야할경우 프로젝트 루트에서 npm install 을 하면 의존 라이브러리가 자동 다운 된다. (아주 좋음)


이제 소켓 서버와 http 서버를 같이 쓸수있도록 해주어야한다.

방법은 간단.

//서버 생성.
이코드를
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});



이렇게 변경한다.
var server = http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

var io = require('socket.io')(server);
io.set('transports', [ 'websocket' ]);

즉 서버생성시 생성된 서버객체를 변수에 할당하고 socket.io 를 불러온후 인자로 넣어주면 끝 아래 transports 어쩌고 하는 구문은 웹소켓 연결여부관련 설정인데 일단 무시해도 되겟다.

자 아이제 이벤트를 걸어주면된다.

io.on('connection', function (socket) {
//이벤트명 이라는 이벤트가 클라이언트로부터 날라오면 호출된다.
socket.on("이벤트명",function(callback){
if(typeof callback === 'function'){
callback();
}
});
});

자 이제 클라이언트에서 연결을 하려면

http://192.168.0.3:3000(소켓서버호스트)/socket.io/socket.io.js 파일을 클라이언트 단 소스에서 임포트 하고


var connectionOptions =  {
        "force new connection" : true,
        "reconnectionAttempts": "Infinity", //avoid having user reconnect manually in order to prevent dead clients after a server restart
        "timeout" : 10000, //before connect_error and connect_timeout are emitted.
        "transports" : ["websocket"]
    };

var socket = io("http://192.168.0.3:3000", connectionOptions);

코드를 추가한다. 
위에 예제처럼 소켓을 얻는다.

socket.io 는 on 을통에 이벤트를 받고 emit 을 통해 이벤트를 전달할수 있다.
채널또한 개설 가능 하고 특정 유저에게만 보내기 io.emit 을 통해 전체보내기등등.. 자세한 함수는 구글링을 참조 할것.









댓글 없음:

댓글 쓰기

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

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