node js Таймаут

Поддержка
  • @DrPrime попробовал поставить 200 сек - не помогло, по дефолту стоит 60 сек видимо

    по тестовому варианту можно подумать, что это происходит из-за большого количества одновременных обращений к node, но в основном скрипте одновременно выполняют это действие около 5 потоков

    записал видео тестового варианта https://drive.google.com/file/d/1P5qgo7JJ87nWOjhzttO5a9tJSitUsRsx/view?usp=sharing

    пока как-то так приходится работать
    0_1523040437063_upload-2eb34a2d-a104-44d2-a078-1dc1daab56ff

  • Думаю это всё таки баг. Но лучше уточнить у @support

    Вот тестовый скрипт , который через node js выводит в лог слово test. Рандомная задержка происходит внутри node js:

    function wait(ms) {
        var start = Date.now(),
            now = start;
        while (now - start < ms) {
          now = Date.now();
        }
    }
    wait([[RANDOM_NUMBER]])
    console.log("test")
    

    Запуск в 258 потоков отрабатывает спокойно. А вот запуск в 259 потоков выводит все потоки в ошибку Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"


    Ещё заметил странность, я закрыл браузеры(обычные, не в BAS), закрыл второе окно BAS. И смог запустить свой тестовый скрипт в 268 потоков. Но опять же, запуск в 269 потоков крашит их всех.


    Решил сделать запись с экрана, при включенной записи не даёт запустить больше 256, а без записи с экрана запускается до 269 потоков.

    0_1523046998770_на форум5.gif

    0_1523046783606_upload-93308a06-0dc6-49a0-9369-f6b85a30fdbd

  • @Fox какое железо? Мб дело в нем

  • @SimpleUser Маловероятно, что у меня с @venom777 одинаковое железо. Что node js у меня и у него работает стабильно до 250 потоков, а дальше может совсем не запустится.

    Я попробовал выделить ошибку в тестовом скрипте. У вас в нём какое максимально-рабочее количество потоков?

  • UP Проблема актуальна 0_1530732709799_11c61fb6-1d46-479b-a941-b83c50a6abee-image.png

  • @venom777 Привет,у меня сейчас похожая задача нужно удалить дубликаты из списка.Я так понял твой скрипт удаляет дубликаты из списка?можешь подсказать как ты решил эту задачу?

  • @assd Тебе нужно удалить дубликаты из списка. А @venom777 искал возможность Сравнения двух словосочетаний (морфология, синтаксис, семантика...). Вот его тема с задачей. А в этой теме обсуждались уже побочные проблемы связанные с использование node js.

  • @fox Вам удалось решить эту проблему? У меня тоже при запуске в 39 потоках из 100 выскакивала ошибка

    "Таймаут во время выполнения функции на встроенном языке"
    

    В самой функции только это:

    var low = ([[THREAD_INDEX]] - 2) * 876;
    var high = ([[THREAD_INDEX]] - 2) * 1103;
    
    function randomInteger(min, max) {
        var rand = min + Math.random() * (max + 1 - min);
        rand = Math.floor(rand);
        return rand;
      }
    
    [[RND_WAIT]] = randomInteger(low, high);
    
    await (new Promise((resolve, reject) => {
        setTimeout(function(){
            resolve();
        }, [[RND_WAIT]]);
    }));
    

    В остальных 61 потоках все выполнялось нормально.

    Но это если значение таймаута в ноде выставлено на "по-умолчанию". Затем я поставил там 10 секунд, и все 100 потоков выполнились без ошибок. Теперь вернул опять на "по-умолчанию" и ошибок уже нет, все 100 потоков успешны.

  • @Fox said in node js Таймаут:

    Запуск в 258 потоков отрабатывает спокойно. А вот запуск в 259 потоков выводит все потоки в ошибку Поток завершился с сообщением "Таймаут во время выполнения функции на встроенном языке"

    Проблема кстати до сих пор не решена, все также потоки завершаются с ошибками - "Таймаут во время выполнения функции на встроенном языке"

  • Тоже столкнулся с проблемой, что nodejs 18 падает и на 10 потоках

  • @Vincent_ said in node js Таймаут:

    Тоже столкнулся с проблемой, что nodejs 18 падает и на 10 потоках

    Можно и в 1 поток уронить инстанс ноды. Выполните эту строку в ноде:

    await new Promise(r => setTimeout(r, 2000000));
    

    Поток завершится ошибкой "Таймаут во время выполнения функции на встроенном языке"

  • @Fox Как в таком случае листить сервер? Вот у меня, есть код

    
    async function startBaS(idsession, uuid) {
        await BAS_FUNCTION(
            "update",
            { "idsession": idsession, "uuid": uuid }
        )
    }
    
    wss.on('connection', (ws) => {
        ws.on('message', async (data) => {
    
            console.log(data)
            if (!data) {
                return
            }
            const message = JSON.parse(data);
            console.log(message);
            if (Object.keys(message).length == 0) {
                ws.send(JSON.stringify({
                    type: 'error',
                    message: 'params not valid Object.keys(message).length == 0'
                }))
                return
            }
            const _id = message._id; // id session
            const _uuid = message.uuid; // id session
            if (!_uuid || !_id) {
                ws.send(JSON.stringify({
                    type: 'error',
                    message: 'params not valid !_uuid || !_id',
                    uuid: _uuid
                }))
                return
            }
            try {
                ws.send(JSON.stringify({ type: 'task_progress', uuid: _uuid, id_session: _id }));
                await startBaS(_id, _uuid)
    
                ws.send(JSON.stringify({ type: 'update_cancel', uuid: _uuid, id_session: _id }));
    
            } catch (e) {
                console.log(e)
                ws.send(JSON.stringify({
                    type: 'update_error',
                    message: e.message
                }))
            }
    
        });
    
    });
    
    await(new Promise(async (resolve, reject) => {
    
        while (true) {
            await new Promise(resolve => setTimeout(resolve, 1000))
        }
    }));
    

    если я не использую цикл ожидания, который указан внизу - функции баса из ноды просто не будут работать - (хотя сам сервер будет принимать запросы и отвечать на них )
    Может есть какой-то коннектор к басу или порт?

  • @Abraham В таком случае вам нужно https://github.com/CheshireCaat/bas-remote-node Тоесть логика приложения пишется в самой node и из нее запускаются нужные функции БАС