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 을 통해 전체보내기등등.. 자세한 함수는 구글링을 참조 할것.
댓글 없음:
댓글 쓰기