людям кто так же столкнётся -> https://community.bablosoft.com/topic/4450/websocket-на-node-js
РЕШЕНО 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:
Изменить архитектуру я не могу, если сделать по инстансу ноды на поток - это очень сильно ударит по производительности.Не используйте глобальные переменные ноды и всё будет нормально
-
@vanarok said in Node js не изолирован в потоках.:
@Fox В том что я не могу использовать многопоток для подключения к вебсокету. Мне нужно держать соединение, а они друг друг перебивают в многопотоке, по-другому я не знаю как это назвать.
Я ещё раз говорю, не используйте глобальные переменные и всё будет нормально. Ну или используйте массив в глобальной переменной.
Только сейчас увидел ваш код, но он должен работать нормально в многопотоке. Приложите тестовый проект, в котором можно повторить ошибку