Websockets和数据库对象范围

时间:2016-07-18 10:58:59

标签: node.js postgresql autobahn

在我的代码中,我希望从Feed中收到“订单”并将其存储在数据库中。

据我所知,每当收到数据时都会调用类方法marketEvent,因此我需要在此函数中使用insert语句。

每次调用类方法时打开和关闭数据库连接都是低效的,所以我试图打开连接并将db对象传递给marketEvent。

我是nodejs和web套接字的新手,所以无法弄清楚如何将它们组合在一起。

var pg = require("pg")
var conString = "postgres://myusername:mypassword@localhost/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();

1 个答案:

答案 0 :(得分:0)

我不知道" pg"和"高速公路"都。但是从" pg"的文档中可以看出来。包,我可以为您提供一些解决方案

client.connect()并不是一个孤立的电话。它希望函数委托执行操作。

connection.onopen = function (session) {
    function marketEvent (args,kwargs) {
        client.connect(function(err) {
            if (err) throw err;
            client.query("INSERT ...", [args]);
        });
    }
    session.subscribe('BTC_XMR', marketEvent);

}

关于有效使用连接,我猜你可能要求汇集。

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();
    });
});

请参考此建议的原始来源以获取确切用法: https://www.npmjs.com/package/pg