Задать вопрос
Ответы пользователя по тегу Node.js
  • Как/где лучше хранить видео(100-200гб)?

    @rPman
    Проблема не в хранении видео, 200гб это очень маленький объем, проблема в трафике.
    само по себе хранение такого объема в месяц будет стоить порядка 3$-10$ на каком-нибудь дешевом хостинге (даже с оверселингом) или любом облачном, заплатишь буквально за количество просмотров
    Ответ написан
    Комментировать
  • На что установить сервер?

    @rPman
    В конечном счете все решает стоимость решений

    Выделенный сервер (dedicated server upd или bare metal) - это буквально физический сервер, мощности которого принадлежат тебе и твоим программам
    Виртуальный сервер (virtual private server) - это когда физический сервер делят на части и продают по отдельности, что сильно дешевле, и удобнее хостеру (он может перекидывать виртуальные машины между физическими, оптимизируя нагрузку), мало того он может оверселить, продавая и обещая больше мощности чем доступно в среднем, надеясь что пиковую нагрузку сервис клиента будет давать редко а остальное время она будет низкой (так обычно и бывает), такие машины обычно самые дешевые (когда видишь предолжения ниже ~30$ это оно самое)

    Кстати нормальная практика даже для dedicated server жесткие диски заменять на NAS например iscsi, а реальный диск предлагать как опцию. Сетевые накопители обычно медленней но сильно дешевле для хостера, так как их так же можно делить, снапшотить (например за их счет делать дешевый бакап) и оверселить (а главное централизованное обслуживание, так как диски чаще всего выходят из строя).

    Благодаря возможностям приложений виртуальных серверов, у пользователей есть очень гибкие возможности по изменению конфигураций машин (cloud), практически 'на лету', в отличии от выделенных серверов, где установка дополнительной памяти или жесткого диска означает буквально физический доступ к серверу. А некоторые хостеры предоставляют еще и средства по автоматизации развертывания виртуальных машины, т.е. сервис сам автоматически от нагрузки может докупать нужные мощности и ресурсы по требованию, и освобождать их когда они не нужны, оптимизируя траты.

    Но нужно понимать что фишки гибкой конфигурации даются не бесплатно и если у тебя постоянная нагрузка, VPS оказываются дороже dedicated server. Правильный подход кроется в комбинировании.

    И еще одна услуга у хостеров - предоставление не сервера а услуги - доступа к програмному обеспечению по какому то внутреннему алгоритму тарификации (Software As A Service). Например можно приобрести услугу http сервера (или к примеру хостинг nodejs бакэнда, отдельно базы данных, сервиса бакапов и т.п., такие точно есть), без покупки самой машины, с тарификацией по запросам, трафику или по внутренним cpu тикам, при этом пользователю не важно, сколько там в реальности задействовано серверов, хостер будет обеспечивать заказанный трафик с обещанной скоростью, только плати. Такие крупные провайдеры как гугл или амазон могут встраивать в свои прайсы на такие сервисы ловушки, не изучив и не подготовившись как следует к которым можно попасть на значительное повышение стоимости, к тому же часто такой доступ еще и привязывает клиента к конкретному провайдеру, так сильно что когда придет известность и нагрузка, может не получиться легко сменить хостера на более оптимальный.
    Ответ написан
    Комментировать
  • Как правильно построить логику приложения?

    @rPman
    Если у загружаемых данных (объектов) нет какого то уникального идентификатора, сделай его из самих данных, взяв к примеру md5 хеш из строки, в которую сериализовал данные (только если внутри есть списки, постарайся чтобы порядок в них не гулял или отсортируй их, речь идет исключительно для получения строки, которая будет для одних и тех же данных всегда одинаковой)

    А дальше все просто, храни этот идентификатор рядом с данными в базе и в момент записи проверяй уникальность именно по нему

    p.s. осторожно, хеш не гарантирует отсутствие коллизий, т.е. что разные данные не дадут одинаковый хеш, с другой стороны вероятность этого события очень мала и пока ты не перекапываешь весь интернет, ты с этим не столкнешься, ну в крайнем случае можно подобрать функцию хеширования с большей битностью для уменьшения этой вероятности
    Ответ написан
    Комментировать
  • Как сделать так, чтобы страница держалась в открытом виде многое время?

    @rPman
    у тебя 2 пути

    простой и дорогой, нужно запустить 100 браузеров (в каждом свой профиль со своими настройками прокси)

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

    p.s. скорее всего не получится где то сэкономить или упростить, эти два пути не только являются граничными но и единственно рабочими
    Ответ написан
  • Как использует ресурсы компьютера Node.js?

    @rPman
    nodejs идеологически однопоточный, то что внутри у него могут быть потоки, это для реализации асинхронного поведения заведомо синхронных вещей...

    после 10.5 версии были добавлены worker_threads гре разработчик может создавать настоящие треды, но для доступа к данным из соседних потоков нужно использовать соответствующие типы данных, например слать сообщения или создавать SharedArrayBuffer...

    p.s. так как адекватных структур данных для многопоточного доступа в nodejs не завезли, то вся работа покроется кучей лишнего кода для реализации недостающего функционала, поэтому если это так критично, лучше реализовывать важные места на более адекватных языках программирования
    Ответ написан
    5 комментариев
  • Как парсером достучаться до объекта window?

    @rPman
    а он есть? window объект окна браузера, у тебя есть браузер?
    пользователь в где? в телеге нет доступного из кода браузера
    бот-парсер запущен не на телеге а на твоем сервере, там ты запустил браузер?
    Ответ написан
    Комментировать
  • Как приложение electron положить скрипт написанный на golang?

    @rPman
    скрипт придется компилировать, либо заранее либо таскать с собой golang (гуглить: portable golang) если же нужно еще и оффлайн, то заранее подгрузи нужные зависимости
    запуск приложения из electron:
    var child = require('child_process').execFile;
    var executablePath = "myapp.exe";
    var parameters = ["--my_param"];
    
    child(executablePath, parameters, function(err, data) {
         console.log(err)
         console.log(data.toString());
    });
    Ответ написан
    Комментировать
  • Автооплата по номеру телефона на Node JS?

    @rPman
    Самый дешевый api для физиков - сбербанковский мобильный банк, за 60 кажется рублей в месяц (30 только получение SMS о движениях на счете) можно делать переводы на чужие счета (тоже физики), оплачивать свои шаблоны платежей и некоторые коммунальные платежи без шаблонов, с помощью отправки SMS на счет 900.

    Т.е. либо с помощью usb модема, либо с помощью приложения для андроид телефона (для apple это недоступно кажется), делаешь бота по отправке таких сообщений и чтения информации о движениях на счете.

    Осторожно, смски тарифицируются сотовым оператором как обычные, так что если будет много наверное озаботиться лучше соответствующим тарифом.

    Осторожно2. Активное использование счета физика для отправки денег другим физикам наказывается баном счета ибо это противозаконная деятельность, хз как это выставляется, по объемам или по количеству сделок, сам лично таким не занимался просто изучал возможность и доступный функционал.
    Ответ написан
    1 комментарий
  • Как откатить версию ноды?

    @rPman
    Запускай свои приложения, настроив минимальную версию окружения в контейнерах docker или рули сам с помощью lxc
    по уму можно запустить приложение в простейшем chroot, настроив минимальный образ системы с помощью debootstrap, немного поковырять с сетевыми настройками (точнее только dns так как сеть будет та же что и основной системы) и смонтировать с помощью bind копии /dev,/sys/,/proc
    Ответ написан
    Комментировать
  • Корректна ли будет такая организация Docker-контейнеров?

    @rPman
    Зачем ты разделяешь части приложения по доккер образам?

    докер образ это считай виртуальная машина на минималках, состояние которого можно (нужно) сбрасывать, и которое логически объединяет функционал, который будет работать как есть... чтобы тупо было удобно разворачивать и обновлять приложение

    я ее пойму базу данных отделить, хотя это отдельный философский разговор, нужно ли ее в принципе в докер образ засовывать, но вот все остальное должно быть одним целым

    так что ответ, хватит одного максимум двух образов
    Ответ написан
  • Возможно ли узнать время, за которое запрос приходит на сервер?

    @rPman
    Логирование и синхронизация точного времени на сервере и клиенте.

    Точный момент (миллисекунды), когда запрос 'пришел' на сервер зависит от точки, в которой происходит замер, например если замерять средствами nginx (запущенный на сервере) и к примеру момент, когда запустится cgi скрипт (первой строчкой которого поставить запись времени в лог) - будут отличаться на десяток миллисекунд.

    Причина в том, как именно запрос обрабатывается, асинхронно или нет (скрипт может принять его либо в тот момент как пришел первый сетевой пакет, или же с последним).
    Ответ написан
  • Каким образом можно минифицировать хеш для имени файла?

    @rPman
    Лучший способ - имя = номер версии, т.е. буквально каждое изменение файла увеличивает номер на единицу (если к имени файла не добавлять его строковое, то нумерация на весь проект будет общая), для этого на этапе сборки файлов придется хранить и подменять настоящие имена их номерами (в этом файле храни не только имя и номер но и хеш, уже длинный, по нему проверяй изменение файла и инициируй выдачу следующего номера).

    Так же номер можно паковать в другую систему счисления с основанием больше 10 (добавив большие маленькие буквы, как это делают в base64)

    В этом случае имя файла не превысит 4-5 символов плюс расширение (от него тоже можно избавиться, если сборка будет подготавливать конфиг для вебсервера, чтобы статика возвращала правильные заголовки content-type, но это кстати часто и не требуется)
    Ответ написан
    Комментировать
  • Как наиболее правильно разработать сервер чата с комнатами на WebSocket?

    @rPman
    Что значит
    Не лезть же каждый раз в БД, чтобы выдать пользователю информацию о других пользователях в его комнате
    ?

    У тебя websocket, что подразумевает что на клиент передается оперативная информация (изменения) а не полное состояние по таймеру, значит клиент самостоятельно хранит в себе необходимую информацию в коде на javascript в массивах или localstorage, если это так критично
    Ответ написан
  • Как в Java посредством GraalVM заставить работать nodejs модуль?

    @rPman
    Может есть какой то модуль, который может эмулировать браузер c его window объектом?

    Могу предложить решить твою задачу по другому, использовать javascript из стандартного JavaFX WebView и WebEngine компонент (это вебкит), код очень простой, из недостатков - нет поддержки gpu ускорения (проигрывание видео youtube нагружает процессор)... доступ к dom html страницы как прямой так и косвенный, через инжект javascript (через setTimeout будет доступ только к песочнице веб страницы), т.е. можно открыть тупо пустую страницу и добавить туда необходимых скриптов.
    Ответ написан
    Комментировать
  • Как удалять элементы из массива так, чтобы он не заменялся null?

    @rPman
    Не использовать массив а объект (конвертировать с помощью Object.assign) или Map, в этом случае последовательность может быть разорвана, да и порядок элементов по ключу может быть не упорядочным
    Ответ написан
    Комментировать
  • Как можно автоматизировать следующую систему?

    @rPman
    Код можно запускать из одного места и файлов, аргументами запуска в командной строке определять идентификатор владельца инстанса, все файлы с данными или что у вас там пусть хранятся в подкаталогах с именем равным этому идентификатору (но лучше конечно в базе данных хранить, тупо будет удобнее).

    Осторожно с обновлениями, точнее с перезапуском бота при обновлениях или обслуживании. Вам нужно либо делать бот таким чтобы можно было безопасно в любой момент его 'остановить' (нужно понимать что ни одна операция с файлами на диске не мгновенна), т.е. вводить механизмы по временной их остановке с ожиданием окончания критичных процессов на это время (и соответствующий мониторинг для вас, чтобы можно было оценить чего ждете).
    Ответ написан
    Комментировать
  • Как сохранять логи консоли в отдельный файл?

    @rPman
    Если нужно сохранить вывод приложения в файл, то запускать его можно просто указав перенаправления через системные пайпы:
    node myprog.js > myprog.log 2>myprog.err
    Ответ написан
    Комментировать