РЕШЕНО Node js не изолирован в потоках.



  • В многопоточном скрипте node js в потоках не изолирован друг от друга. Мой скрипт подключается к чату в нескольких потоках одновременно и что-то идет не так, я отслеживаю это по участникам чата. Все подключаются и спустя время отключаются все кроме последнего подключившегося. Я проверил свое предположение в нескольких отдельно запущенных скриптах(не потоках) и это работает, все подключены и никто не отключился. Я все еще думаю над решением этой проблемы, т.к мне нужно использовать от 20 потоков, а вариант с запуском отдельных процессов не экономичен.

    Мой код подключения в вебсокету, если это интересно(саму проблему он не покажет, если использовать, он только для ознакомления):

    var WebSocket = require('ws');
    var SocksProxyAgent = require('https-proxy-agent');
     
    var endpoint = 'wss://echo.websocket.org';
    var options = {
        host: '136.244.107.125', //proxy
        port: '8080', // port proxy
        protocol: 'http',
        headers: {
            'Connection': 'Upgrade',
            'Upgrade': 'websocket',
            'Sec-WebSocket-Version': '13',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
            'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
        }
    
    
    }
    var agent = new SocksProxyAgent(options);
    
    var socket = new WebSocket(endpoint, { agent: agent });
     
    socket.on('open', function () {
      console.log('open event!');
    });
     
    socket.on('message', function (data, flags) {
      console.log(data);
      socket.close();
    });
    
    
    


  • @vanarok said in Node js не изолирован в потоках.:

    В многопоточном скрипте node js в потоках не изолирован друг от друга. Мой скрипт подключается к чату в нескольких потоках одновременно и что-то идет не так, я отслеживаю это по участникам чата. Все подключаются и спустя время отключаются все кроме последнего подключившегося. Я проверил свое предположение в нескольких отдельно запущенных скриптах(не потоках) и это работает, все подключены и никто не отключился. Я все еще думаю над решением этой проблемы, т.к мне нужно использовать от 20 потоков, а вариант с запуском отдельных процессов не экономичен.

    А в чём вопрос то? На счёт ноды в разных потоках могу процитировать ответ @support:

    Изменить архитектуру я не могу, если сделать по инстансу ноды на поток - это очень сильно ударит по производительности.
    

    Не используйте глобальные переменные ноды и всё будет нормально



  • @Fox В том что я не могу использовать многопоток для подключения к вебсокету. Мне нужно держать соединение, а они друг друг перебивают в многопотоке, по-другому я не знаю как это назвать.



  • @vanarok said in Node js не изолирован в потоках.:

    @Fox В том что я не могу использовать многопоток для подключения к вебсокету. Мне нужно держать соединение, а они друг друг перебивают в многопотоке, по-другому я не знаю как это назвать.

    Я ещё раз говорю, не используйте глобальные переменные и всё будет нормально. Ну или используйте массив в глобальной переменной.

    Только сейчас увидел ваш код, но он должен работать нормально в многопотоке. Приложите тестовый проект, в котором можно повторить ошибку



  • Решил по мотивам.


Log in to reply