我正在使用X1 M0 N1 X和X1 M1 N1 X。我还有X1 M2 N1 X Express应用程序,它是为了服务客户端请求而设计的。
执行并发请求时遇到问题。并发处理客户端请求时数据库连接挂起:
当应用程序收到请求时会执行什么操作?
打开数据库连接-
db = new Database(dbConfig.url);
db.useDatabase(dbConfig.name);
db.useBasicAuth(dbConfig.username, dbConfig.password);
有多个中间件函数需要访问以执行各种功能和可访问性检查。
- 打开新数据库连接-〉
- 执行操作-〉
- 关闭连接-〉
- 将结果返回给下一个中间件。
一次只发出一个请求的情况下,这个方法可以正常工作。但是如果我试图同时调用两个API,我会得到CONNECTIONRESET错误。并且还会抛出套接字挂起错误。
我试着推荐关闭连接方法,它开始工作了一段时间。但当我增加连接数量时,它再次显示与“连接重置”相同的错误。
我已经搜索了arangojs
的文档,但没有找到任何关于连接操作的信息。
任何帮助都将不胜感激。
1条答案
按热度按时间rjjhvcjd1#
这对您来说可能太晚了,但我也遇到了类似的问题。在与ArangoDB支持人员交谈后,原来是套接字的问题。
查看
netstat -aplnt
的输出时,我看到了大量的CLOSE_WAIT
和TIME_WAIT
消息,表明有大量连接没有正确关闭。解决方案是启用持久连接(请参阅arangojs config中的keep-alive和maxSockets),然后尽可能重用单个连接。这不仅仅是一个设置更改,还需要一些代码修改。