Best Practice to implement socket.io

1,257 views
Skip to first unread message

Chrobak Stefan

unread,
Jan 11, 2016, 7:12:57 PM1/11/16
to nodejs
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



Reply all
Reply to author
Forward
0 new messages