#node.js #arangodb #connection-reset #arangojs
#node.js #arangodb #соединение-сброс #arangojs
Вопрос:
Я использую arangojs v6.14.1
и arangodb version 3.6.4.
. У меня также есть приложение nodejs
express, которое предназначено для обслуживания клиентских запросов.
Я испытываю проблему при выполнении одновременных запросов. Зависание соединения с базой данных при одновременной обработке клиентских запросов:
Что приложение будет делать, когда получит запрос?
Откройте соединение с базой данных —
db = new Database(dbConfig.url);
db.useDatabase(dbConfig.name);
db.useBasicAuth(dbConfig.username, dbConfig.password);
Существует несколько функций промежуточного программного обеспечения, к которым требуется доступ для выполнения различных функций и проверок доступности. И для каждого промежуточного программного обеспечения я пытался
- откройте новое подключение к базе данных ->
- выполните действие ->
- закройте соединение ->
- верните результат следующему промежуточному программному обеспечению.
Это отлично работает с одним запросом за раз. Но если я попытался вызвать два API одновременно, я получаю ошибку CONNECTIONRESET. А также выдает ошибку зависания сокета.
Я попытался использовать метод close connection, и некоторое время он работал нормально. Но когда я увеличил количество подключений, он снова показывает ту же ошибку, что и «CONNECTIONRESET».
Я просмотрел документацию arangojs
о манипулировании соединением. Но я не нашел никакой информации об этом.
Любая помощь будет высоко оценена.
Ответ №1:
Возможно, для вас уже слишком поздно, но у меня была похожая проблема. После разговора со службой поддержки ArangoDB выяснилось, что это проблема с сокетами.
Просматривая выходные данные netstat -aplnt
, я видел много CLOSE_WAIT
TIME_WAIT
сообщений и, указывающих на то, что было МНОГО соединений, которые не были закрыты должным образом.
Решение состояло в том, чтобы включить постоянные соединения (см. arangojs config для keep-alive и maxSockets), А затем повторно использовать одно соединение, когда это возможно. Это было больше, чем просто изменение настроек, требующее также некоторых модификаций кода.