반응형
nodejs -- socket.io, express-generator 시작 설정하기
환경 : node.js 4.2.1, express 4.13.1, socket.io 1.3.7, WebStorm 10.0.4
http://gulivert.ch/create-a-chat-app-with-nodejs-express-and-socket-io/
express-generator 로 프로젝트를 만들때, socket.io 모듈을 사용해보자.
app.js 내부에서, socket.io 를 사용할때, 아래와 같이 하면, bin/www 에서 서버와 연결하기 어렵다.
io = require('socket.io')();
==> 해결책 :
app.io = require('socket.io')();
socket.io 로직부분은 module.exports = app; 바로 직전에 입력하자!
아래 코드는 socket.io 를 http server 와 연결한다.
app.io.attach(server);
--> 이제 3000 번 포트로 socket.io 사용 가능해진다.
client 부분 구현하기.
브라우저에서 접속한 화면
서버에서 socket.io client 연결 성공한 화면.
<< 소스 >>
-- express-generator 로 생기는 소스중 변화없는 것은 제외 됨...
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var express = require('express'); | |
var path = require('path'); | |
var favicon = require('serve-favicon'); | |
var logger = require('morgan'); | |
var cookieParser = require('cookie-parser'); | |
var bodyParser = require('body-parser'); | |
var routes = require('./routes/index'); | |
var users = require('./routes/users'); | |
var app = express(); | |
app.io = require('socket.io')(); | |
// view engine setup | |
app.set('views', path.join(__dirname, 'views')); | |
app.set('view engine', 'jade'); | |
// uncomment after placing your favicon in /public | |
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); | |
app.use(logger('dev')); | |
app.use(bodyParser.json()); | |
app.use(bodyParser.urlencoded({ extended: false })); | |
app.use(cookieParser()); | |
app.use(express.static(path.join(__dirname, 'public'))); | |
app.use('/', routes); | |
app.use('/users', users); | |
// catch 404 and forward to error handler | |
app.use(function(req, res, next) { | |
var err = new Error('Not Found'); | |
err.status = 404; | |
next(err); | |
}); | |
// error handlers | |
// development error handler | |
// will print stacktrace | |
if (app.get('env') === 'development') { | |
app.use(function(err, req, res, next) { | |
res.status(err.status || 500); | |
res.render('error', { | |
message: err.message, | |
error: err | |
}); | |
}); | |
} | |
// production error handler | |
// no stacktraces leaked to user | |
app.use(function(err, req, res, next) { | |
res.status(err.status || 500); | |
res.render('error', { | |
message: err.message, | |
error: {} | |
}); | |
}); | |
app.io.on('connection', function(socket){ | |
console.log('socketio user connected...'); | |
}); | |
module.exports = app; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
doctype html | |
html | |
head | |
meta(charset='UTF-8') | |
title= title | |
link(rel='stylesheet', href='/stylesheets/style.css') | |
script(src='/socket.io/socket.io.js') | |
script. | |
// var socket = io.connect('http://192.168.0.2:3030'); | |
var socket = io('http://192.168.0.2:3000'); | |
socket.on('news', function (data) { | |
console.log(data); | |
socket.emit('my other event', {my: 'data'}); | |
}); | |
body | |
block content |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "chat", | |
"version": "0.0.0", | |
"private": true, | |
"scripts": { | |
"start": "node ./bin/www" | |
}, | |
"dependencies": { | |
"body-parser": "~1.13.2", | |
"cookie-parser": "~1.3.5", | |
"debug": "~2.2.0", | |
"express": "~4.13.1", | |
"jade": "~1.11.0", | |
"morgan": "~1.6.1", | |
"serve-favicon": "~2.3.0", | |
"socket.io": "^1.3.7" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
/** | |
* Module dependencies. | |
*/ | |
var app = require('../app'); | |
var debug = require('debug')('chat:server'); | |
var http = require('http'); | |
/** | |
* Get port from environment and store in Express. | |
*/ | |
var port = normalizePort(process.env.PORT || '3000'); | |
app.set('port', port); | |
/** | |
* Create HTTP server. | |
*/ | |
var server = http.createServer(app); | |
app.io.attach(server); | |
/** | |
* Listen on provided port, on all network interfaces. | |
*/ | |
server.listen(port); | |
server.on('error', onError); | |
server.on('listening', onListening); | |
/** | |
* Normalize a port into a number, string, or false. | |
*/ | |
function normalizePort(val) { | |
var port = parseInt(val, 10); | |
if (isNaN(port)) { | |
// named pipe | |
return val; | |
} | |
if (port >= 0) { | |
// port number | |
return port; | |
} | |
return false; | |
} | |
/** | |
* Event listener for HTTP server "error" event. | |
*/ | |
function onError(error) { | |
if (error.syscall !== 'listen') { | |
throw error; | |
} | |
var bind = typeof port === 'string' | |
? 'Pipe ' + port | |
: 'Port ' + port; | |
// handle specific listen errors with friendly messages | |
switch (error.code) { | |
case 'EACCES': | |
console.error(bind + ' requires elevated privileges'); | |
process.exit(1); | |
break; | |
case 'EADDRINUSE': | |
console.error(bind + ' is already in use'); | |
process.exit(1); | |
break; | |
default: | |
throw error; | |
} | |
} | |
/** | |
* Event listener for HTTP server "listening" event. | |
*/ | |
function onListening() { | |
var addr = server.address(); | |
var bind = typeof addr === 'string' | |
? 'pipe ' + addr | |
: 'port ' + addr.port; | |
debug('Listening on ' + bind); | |
} |
반응형
'nodejs' 카테고리의 다른 글
nodejs -- nodejs 4.3.0 LTS 로 update 하기 (0) | 2016.02.15 |
---|---|
nodejs -- socket.io 1.3.7 + jquery 예제 만들기 (수정 예정) (0) | 2015.12.17 |
nodejs -- MongoDB 연동 (0) | 2015.11.08 |
nodejs -- mysql 연동 (0) | 2015.11.08 |
nodejs -- WebStorm 에서 nodejs 시작하기 (0) | 2015.10.24 |