OrientJS中的连接池

12

我想在Express.js中使用OrientJS,如何在进行任何http请求之前配置连接池,在请求/响应周期中获取和释放来自连接池的连接,并在关闭应用程序时完成池的操作?


OrientJS的功能似乎已经包含了连接池支持。你试过了吗?否则,你可以使用类似于这个通用资源池模块来处理客户端。 - xmikex83
不,我没有,因为我不知道如何使用它。不过你提到的那个模块看起来很有趣。 - André
1个回答

4

我已经研究了一下OrientJS源代码,实际上找到了一种使用内置的ConnectionPool的方法。

你不需要任何通用的资源池模块(就像我在上面的评论中提到的那样)。基本上,它非常简单。你需要做的就是:

var OrientDB = require('orientjs');

var server = OrientDB({
  host: 'localhost',
  port: 2424,
  username: 'root',
  password: 'yourpassword',
  pool: {
    max: 10
  }
});

现在你的服务器对象正在使用内置的ConnectionPool,最大允许连接数为10
如果你检查server.transport.pool,你会看到内部池对象。
要实际检查有多少连接被建立(或正在使用),可以检查server.transport.pool.connections的长度(它是一个数组)。
观察连接使用情况的另一种方法是使用一个简单的bash命令:
$ watch -n 0.1 'netstat -p tcp -an | grep 2424'

你会看到这些连接。

从这个点开始,你可以立即开始查询,连接池将自动使用。


1
这很酷。但现在我们需要想办法在http生命周期内管理连接。我认为你的片段必须在我引导express js时使用,对吗?你知道如何在构建响应后释放连接,以及在我的服务器完成时如何关闭池吗? - André
1
我非常关注这个问题,因为我想要优雅地关闭所有内容并正确完成池,必要时关闭OrientDB服务器,并处理可能发生的任何错误。如果不适当地关闭事物,似乎OrientDB有时会损坏文件... - André
1
在我看来,你需要创建一个模块来导出 server 变量,然后在应用程序中需要时引用它。连接的获取/释放过程由 OrientJS 自动处理,因此您不需要做任何事情,只需使用服务器对象查询您的数据库。要优雅地关闭所有连接,只需调用 server.close()。请记住,如果您想在此之后查询数据库,则必须再次执行 var server = OrientDB( ... ) - xmikex83
我会测试你的解决方案,然后在这里发布。赏金归于你。感谢你的帮助。 - André
很高兴如果能帮到您。谢谢! - xmikex83
这对于连接池的帮助非常大,而且在2018年仍然有效,谢谢! - mitchken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接