var express = require('express'), async = require('async'), pg = require("pg"), Pool = require("pg-pool"), cookieParser = require('cookie-parser'), bodyParser = require('body-parser'), methodOverride = require('method-override'), app = express(), server = require('http').Server(app), io = require('socket.io')(server); var config = { host: 'localhost', user: 'postgres', password: '', database: 'postgres', max: 10, // max number of clients in pool idleTimeoutMillis: 1000, // close & remove clients which have been idle > 1 second }; var client = new Pool(config) io.set('transports', ['polling']); var port = process.env.PORT || 4000; io.sockets.on('connection', function (socket) { socket.emit('message', { text : 'Welcome!' }); socket.on('subscribe', function (data) { socket.join(data.channel); }); }); async.retry( {times: 1000, interval: 1000}, function(err, client) { if (err) { return console.err("Giving up"); } console.log("Connected to db"); getVotes(client); } ); function getVotes(client) { client.query('SELECT vote, COUNT(id) AS count FROM votes GROUP BY vote', [], function(err, result) { if (err) { console.error("Error performing query: " + err); } else { var votes = result.rows[0].count io.sockets.emit("scores", JSON.stringify(votes)); } setTimeout(function() {getVotes(client) }, 1000); }); } app.use(cookieParser()); app.use(bodyParser()); app.use(methodOverride('X-HTTP-Method-Override')); app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS"); next(); }); app.use(express.static(__dirname + '/views')); app.get('/', function (req, res) { res.sendFile(path.resolve(__dirname + '/views/index.html')); }); server.listen(port, function () { var port = server.address().port; console.log('App running on port ' + port); });