2016-07-18 15 views
0

In meinem Code unten möchte ich eine "Bestellung" aus dem Feed erhalten und in der Datenbank speichern.WebSockets und Datenbank Objektbereich

Ich verstehe, dass die Klassenmethode marketEvent aufgerufen wird, wann immer Daten empfangen werden und dementsprechend würde ich meine Insert-Anweisung innerhalb dieser Funktion benötigen.

Es wäre ineffizient, die db-Verbindung jedes Mal zu öffnen und zu schließen, wenn die Klassenmethode aufgerufen wird. Daher möchte ich die Verbindung öffnen und das db-Objekt an marketEvent übergeben.

Ich bin neu in Nodejs und Web-Sockets, so kann nicht herausfinden, wie es zusammenzusetzen.

var pg = require("pg") 
var conString = "postgres://myusername:[email protected]/poloniex"; 
var client = new pg.Client(conString); 


var autobahn = require('autobahn'); 
var wsuri = "wss://api.poloniex.com"; 
var connection = new autobahn.Connection({ 
    url: wsuri, 
    realm: "realm1" 
}); 

connection.onopen = function (session) { 
    function marketEvent (args,kwargs) { 
     client.query("INSERT INTO orderbook(order) values($1)", [args]); 
    } 
    session.subscribe('BTC_XMR', marketEvent); 

} 

connection.onclose = function() { 
    console.log("Websocket connection closed"); 
} 


client.connect(); 
connection.open(); 

Antwort

0

Ich bin nicht bewusst von "Pg" und "Autobahn" beide. Aber aus der Dokumentation von "pg" -Paket, kann ich Ihnen einen Hinweis auf die Lösung bieten

client.connect() ist kein isolierter Anruf. Es erwartet einen Funktionsdelegaten, um die Operation auszuführen.

Über die Verwendung der Verbindung effizient, möglicherweise fragen Sie nach Pooling, denke ich.

var pool = new pg.Pool(config); 
pool.connect(function(err, client, done) { 
    if (err) throw err; 
    client.query('INSERT ...', function(err, result) { 
     //call `done()` to release the client back to the pool 
     done(); 
    }); 
}); 

Siehe ursprüngliche Quelle dieser Vorschlag für die genaue Nutzung: https://www.npmjs.com/package/pg