Skip to content

Commit de9d653

Browse files
author
sophia parafina
committed
added connection pooling to postgres to prevent client timeouts
1 parent 7d759f0 commit de9d653

File tree

2 files changed

+15
-21
lines changed

2 files changed

+15
-21
lines changed

result/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"method-override": "^2.3.5",
1616
"async": "^1.5.0",
1717
"pg": "^4.4.3",
18+
"pg-pool": "1.6.0",
1819
"socket.io": "^1.3.7"
1920
}
2021
}

result/server.js

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
11
var express = require('express'),
22
async = require('async'),
33
pg = require("pg"),
4+
Pool = require("pg-pool"),
45
cookieParser = require('cookie-parser'),
5-
bodyParser = require('body-parser'),
6+
bodyParser = require('body-parser'),
67
methodOverride = require('method-override'),
78
app = express(),
89
server = require('http').Server(app),
910
io = require('socket.io')(server);
1011

12+
var config = {
13+
host: 'localhost',
14+
user: 'postgres',
15+
password: '',
16+
database: 'postgres',
17+
max: 10, // max number of clients in pool
18+
idleTimeoutMillis: 1000, // close & remove clients which have been idle > 1 second
19+
};
20+
21+
var client = new Pool(config)
22+
1123
io.set('transports', ['polling']);
1224

1325
var port = process.env.PORT || 4000;
@@ -23,14 +35,6 @@ io.sockets.on('connection', function (socket) {
2335

2436
async.retry(
2537
{times: 1000, interval: 1000},
26-
function(callback) {
27-
pg.connect('postgres://postgres@db/postgres', function(err, client, done) {
28-
if (err) {
29-
console.error("Waiting for db");
30-
}
31-
callback(err, client);
32-
});
33-
},
3438
function(err, client) {
3539
if (err) {
3640
return console.err("Giving up");
@@ -45,24 +49,13 @@ function getVotes(client) {
4549
if (err) {
4650
console.error("Error performing query: " + err);
4751
} else {
48-
var votes = collectVotesFromResult(result);
52+
var votes = result.rows[0].count
4953
io.sockets.emit("scores", JSON.stringify(votes));
5054
}
51-
5255
setTimeout(function() {getVotes(client) }, 1000);
5356
});
5457
}
5558

56-
function collectVotesFromResult(result) {
57-
var votes = {a: 0, b: 0};
58-
59-
result.rows.forEach(function (row) {
60-
votes[row.vote] = parseInt(row.count);
61-
});
62-
63-
return votes;
64-
}
65-
6659
app.use(cookieParser());
6760
app.use(bodyParser());
6861
app.use(methodOverride('X-HTTP-Method-Override'));

0 commit comments

Comments
 (0)