Hello, i'm a beginer with node.js and just now i try to learn
best practice of how to implement a socket.io module to
my node.js testwebsite.
----------------------------------------------------
server use :
node.js 5
express 4
socket.io 1.4
----------------------------------------------------
client use :
JQuery 1.10
----------------------------------------------------
directory structure :
dir bin
dir js
- server.js
dir public
- index.js
dir routes
- index.js
dir socket
-app.socket.io.js
app.js
browserify.js
package.json
----------------------------------------------------
*bin/server.js contains*
var console = require('console');
var app = require('../app');
var debug = require('debug')('ScriptShareing:server');
var http = require('http');
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server = http.createServer(app);
var socket = require('../socket/app.socket.io')(server);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
function normalizePort(val) {
var port = parseInt(val, 10);
return (isNaN(port)) ? val : ((port >= 0) ? port : FALSE);
}
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;
}
}
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
*socket/app.socket.io.js contains*
var console = require('console');
module.exports = function (server) {
var io = require('socket.io')(server);
io.on('connection', function (socket) {
console.log('a user connected');
var userIsSet = false;
socket.on('add user', function (username) {
username = username.replace(/\s/g,'');
if (username.length) {
socket.username = username;
userIsSet = true;
socket.emit('login success');
io.emit('new user', {timestamp:new Date(), username:username});
} else {
socket.emit('login error');
}
});
socket.on('chat message', function (data) {
data.timestamp = new Date();
io.emit('chat message', data);
});
socket.on('disconnect', function () {
console.log('user disconnected');
});
});
};
*app.js containes*
var console = require('console');
var express = require('express');
var path = require('path');
var app = express();
var routes = require('./routes/index');
app.use('/', routes);
app.use(express.static(path.join(__dirname, 'public')));
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
// catch 404 and forward to error handler
app.use(function(req, res, next) {
console.log('error: ', typeof Error);
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// development error handler
// will print stacktrace
if (app.get('env') !== 'development') {
} else {
app.use(function (err, req, res) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
//error: {}
});
});
}
*routes/index.js contains*
var console = require('console');
var express = require('express');
var router = express.Router();
router.get('/', function (req, res) {
var view = {
title:'NetCoApp Node Chat',
text:'Welcome, you are visting our Node Test Chat!'
};
res.render('index',view);
});
module.exports = router;
There are many ways to implement socket.io and the socket-handling, now i
include app.socket.io-script
in server.js but i'm not shure that this is the best practice.
Grateful about any answer,
Stefan
--
Job board: http://jobs.nodejs.org/
New group rules:
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/nodejs/8ee15b2b-7b96-4b3a-be03-977954991aa9%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.