select * from rdb$relations
ab -n 10000 -c 5 http: // localhost: 1337 /
var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); var con = fb.createConnection(); con.connectSync(cfg.db, cfg.user, cfg.password, cfg.role); var rs = con.querySync('select * from rdb$relations'); var rows = rs.fetchSync("all",true); con.disconnect(); res.write('['); rows.forEach(function(r){ res.write(JSON.stringify(r)+','); }); res.end(']'); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/');
var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); var con = fb.createConnection(); con.connect(cfg.db, cfg.user, cfg.password, cfg.role,function(){ con.query('select * from rdb$relations',function(err,rs){ res.write('['); rs.fetch("all",true,function(r){ res.write(JSON.stringify(r)+','); }, function(err){ con.disconnect(); res.end(']'); }); }); }); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/');
var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var http = require('http'); var con = fb.createConnection(); con.connectSync(cfg.db, cfg.user, cfg.password, cfg.role); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); if(!con.inTransaction) con.startTransactionSync(); var rs = con.querySync('select * from rdb$relations'); var rows = rs.fetchSync("all",true); res.write('['); rows.forEach(function(r){ res.write(JSON.stringify(r)+','); }); res.end(']'); con.commitSync(); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/');
var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var http = require('http'); var con = fb.createConnection(); con.connectSync(cfg.db, cfg.user, cfg.password, cfg.role), busy = false, next = []; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); function doReq(){ con.query('select * from rdb$relations',function(err,rs){ res.write('['); rs.fetch("all",true,function(r){ res.write(JSON.stringify(r)+','); }, function(err){ res.end(']'); con.commit(function(){ busy = false; var n = next.pop(); if(n) n(); }); }); }); } function process(){ busy = true; if(!con.inTransaction) con.startTransaction(doReq); else doReq(); } if(busy) next.push(function(){ process(); }); else process(); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/');
var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var events = require('events'); var http = require('http'); function ConnectionPool() { events.EventEmitter.call(this); this.conns = []; this.busy = []; this.MaxConns = 5; this.newConn = function(){ var c = fb.createConnection(); c.connectSync(cfg.db, cfg.user, cfg.password, cfg.role); this.conns.push(c); }; this.get = function(cb) { var self = this; var c = this.conns.pop(); if(c) { this.busy.push(c); cb(c); } else if((this.busy.length) >= this.MaxConns){ this.once('release',function(){ self.get(cb); }); } else { this.newConn(); this.get(cb); } }; this.release = function(con){ for(var i=0;i<this.busy.length;i++) { if(this.busy[i] == con){ this.conns.push(this.busy[i]); this.busy.splice(i,1); var self = this; process.nextTick(function(){ self.emit('release'); }); return; } } }; } util.inherits(ConnectionPool, events.EventEmitter); var pool = new ConnectionPool(); pool.setMaxListeners(2000); function exec(con,res){ con.query('select * from rdb$relations',function(err,rs){ res.write('['); rs.fetch("all",true,function(r){ res.write(JSON.stringify(r)+','); },function(err){ res.end(']'); con.commit(function(){ pool.release(con); }); }); }); }; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); pool.get(function(con){ if(!con.inTransaction) con.startTransaction(function(err){ if(!err) exec(con,res); }); else exec(con,res); }); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/');
var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var events = require('events'); var http = require('http'); function StatementPool() { events.EventEmitter.call(this); this.conns = []; this.busy = []; this.MaxConns = 5; this.newConn = function(){ var c ={ conn: fb.createConnection() }; c.conn.connectSync(cfg.db, cfg.user, cfg.password, cfg.role); c.stmt = c.conn.prepareSync('select * from rdb$relations'); this.conns.push(c); }; this.get = function(cb) { var self = this; var c = this.conns.pop(); if(c) { this.busy.push(c); cb(c); } else if((this.busy.length) >=this.MaxConns){ this.once('release',function(){ self.get(cb); }); } else { this.newConn(); this.get(cb); } }; this.release = function(con){ for(var i=0;i<this.busy.length;i++) { if(this.busy[i] == con){ this.conns.push(this.busy[i]); this.busy.splice(i,1); var self = this; process.nextTick(function(){ self.emit('release'); }); return; } } }; } util.inherits(StatementPool, events.EventEmitter); var pool = new StatementPool(); pool.setMaxListeners(2000); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); pool.get(function(con){ var exec = function(){ con.stmt.exec(); con.stmt.once('result',function(err){ res.write('['); con.stmt.fetch("all",true,function(r){ res.write(JSON.stringify(r)+','); }, function(err){ res.end(']'); con.conn.commit(function(){ pool.release(con); }); }); }); }; if(!con.conn.inTransaction) con.conn.startTransaction(function(err){ if(!err) exec(); }); else exec(); }); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/');
Source: https://habr.com/ru/post/139708/
All Articles