关闭OpenLink Virtuoso HTTP连接

时间:2017-09-29 12:49:20

标签: node.js mocha sparql virtuoso openlink-virtuoso

我们使用OpenLink Virtuoso作为NodeJS项目的主数据库管理器。我们仅通过HTTP SPARQL端点使用SPARQL查询来查询数据库。为此,我们使用request-promise库,具有以下配置:

        const queryRequest = rp({
            method: "POST",
            uri: queryObject.fullUrl,
            form: {
                query: queryObject.query,
                maxrows: queryObject.maxRows,
                format: queryObject.resultsFormat
            },
            headers: {
                'content-type': 'application/x-www-form-urlencoded'
            },
            json: true,
            forever : true, // Keep connections alive instead of creating new ones
            timeout : Config.dbOperationTimeout,

        })
            .then(function (parsedBody) {

运行我们的测试时,我们会启动应用程序(新的快速应用程序对象和nodejs服务器)数百次,并尝试干净地关闭它。该应用程序关闭,服务器也,但我认为virtuoso连接保持打开,因为虽然我们正在尝试重用现有连接,但连接数量仍在缓慢增加。

close()方法(拆除应用程序)运行这些功能:

const closePendingConnections = function(callback)
{
    async.map(Object.keys(self.pendingRequests), function(queryID, cb)
    {
        if(self.pendingRequests.hasOwnProperty(queryID))
        {
            self.pendingRequests[queryID].cancel(cb) //try to abort all requests in the queue
        }
    }, callback);
};

const destroyQueue = function(callback)
{
    self.q.destroy(callback);
};

在大约150次测试(启动和关闭)之后,查询开始失败并且测试停止。我们尝试使用队列来确保在给定时间每个应用程序启动只有一个与virtuoso的连接是活动的。打印待处理连接数会在队列中不断显示0或1个请求,因此我知道这不是队列的问题。

运行这些测试后,virtuoso Profiler的屏幕截图位于何处:

enter image description here

在每次服务器和应用程序关闭之后以及再次启动之前,有没有办法强制所有HTTP连接到virtuoso关闭(因为我们必须为每个测试执行此操作)?

0 个答案:

没有答案