Ответы пользователя по тегу Impress
  • Сколько стоит реализация проекта Impress Application Server для Node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Вопрос класса
    сколько стоит квартира?
    размеры? какая? где? У меня много студентов, в КПИ есть конструкторское бюро, разрабатывают на технологическом стеке Metarhia, частью которого и есть Impress.
    Ответ написан
    Комментировать
  • Как выполнять деплой приложений impress?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    При изменении конфигов нужно перезапускать приложение, это можно делать через командную строку impress stop и impress stop

    А вот access.js должен подхватываться автоматически. Присылайте не работающий пример сюда: https://github.com/metarhia/Impress/issues
    Ответ написан
    Комментировать
  • Зачем нужен master server в impress?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    В Impress каждый процесс имеет свой открытый порт отдельный, это нужно для того, чтобы к нему можно было подключаться не через мастер-процесс, а напрямую. Вообще межпроцессовое взаимодействие в Impress есть, дочерние процессы подключаются по TCP к мастер-процессу для того, чтобы он обеспечивал синхронизацию данные, трансляцию событий и управление ими всеми. Но вот клиентские подключения через мастера не проходят, а идут сразу в воркеры. В примере www это http сервер на 80 порту, rpc это jstp сервер на 3000 порту. Что такое JSTP можно почитать тут: https://github.com/metarhia/JSTP и еще вот эту статью почитать или послушать: https://habrahabr.ru/post/306584/
    Ответ написан
  • Как синхронизировать контекст приложения между воркерами в режиме cluster или sticky?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Сори за задержку с ответом, я был в Китае, немного застрял там, потом разгребал завал дел. Это все в Impress автоматически происходит. В общем, я подробно ответил на гитхабе https://github.com/tshemsedinov/impress/issues/458
    Ответ написан
  • Как вести Debug приложения в Impress?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Приложения не нужно отлаживать, их нужно сразу писать идеально в средах разработки vi, vim, emacs, far. Если все же, нужно из идеального приложения вывести отладочную инфу, то это можно сдлелать в консоль через console.log(); console.dir() или в логи через impress.log.debug(...); и оно попадет в /log/YYYY-MM-DD-debug.log
    Ответ написан
  • Как правильно расширить функциональность модулей Impress?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Можно добавить этот модуль в Impress или самостоятельно и сделать fork и pull request в github или тут запросить https://github.com/tshemsedinov/impress/issues Вообще, реализация поддержки pgsql для security запланирована примерно на начало следующего года.
    Ответ написан
  • Как правильно выставить заголовок ответа в IAS?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Для этого не нужно писать код, можно в конфигах приложения, т.е. в /applications/appName/config/application.js задать параметр allowOrigin: '*' или вместо звезды там написать домен или маску доменов.
    Ответ написан
    Комментировать
  • Как правильно подключать и использовать внешние модули в ImpressAS?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Теперь подключение модулей несколько изменилось, для этого случая в /applications/my-app/config/sandbox.js в раздел api добавьте 'node-expat' и тереь из любого обработчика можно будет обращаться к нему как api.nodeExpat. Не забудьте обновить версию Impress до сегодняшней 0.1.372, там исправлена проблема с заменой тире в именах модулей, т.е. преобразованием spinalToCamel, например: node-expat в nodeExpat, потому, что писать api['node-expat'] как-то не красиво, лучше api.nodeExpat и я это поправил.

    Теперь о случае с аплоадом, в Вашем коде почему-то не видно где происходит аплоад файла, а сразу начинается парсинг. Если Вы хотите делать аплоад, то его нужно делать в обработчике post.js, а потом для парсинга уже и для других долгих операций ответветвлять процесс. Вообще, имеет ли смысл ответвлять процесс - это большой вопрос, потому как fork работает не быстро, а новый процесс ест память, так что, если парсинг быстрый (занимает десятки миллисекунд), то нет смысла его форкать, а если это несколько секунд блокирования процесса, то да - тут нужно форкать.
    Ответ написан
    Комментировать
  • Как правильно выполнять разовые операции в ImpressAS?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Если операция должна быть доступна из разных мест приложения, то ее можно положить в /applications/myApp/lib, но тут, скорее всего, речь идет об операции, навешенной на обработчик HTTP, но чтобы она не мешала другим запросам. Если такая операция долгая, в этом случае, ее нужно форкнуть в отдельный процесс, как сделано в примере: /applications/example/server/examples/tools/forkWorker.json

    Файл: get.js
    module.exports = function(client, callback) {
      client.context.data = { someDataForWorker: 'parameterValue' };
      client.fork('worker');
      callback();
    };


    Файл: worker.js
    module.exports = function(client, callback) {
      console.log('Message from forked worker');
      console.dir(Object.keys(client));
      callback();
    };


    Из worker.js видны соединения с базой, все, что подгружается из /lib и /init, это полноценный процесс, только не обрабатывающий HTTP.
    Ответ написан
    Комментировать
  • Можно ли реализовать такой сценарий?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Ничего сложного в этом нет, вот только рекомендую переместить переменные, или скорее это константы в /init/constants.js, а то ведь на /server/requests.js они каждый раз создаются и теряются. Например так:
    application.constants = {
      'domain1.com': { field1: "value1", ... }
      'domain2.net': { field1: "value1", ... },
        ...
    };

    А в /server/requests.js их можно будет просто возвращать в зависимости от домена сайта:
    module.exports = function(client, callback) {
      client.cache('10m');  // кешируем на 10 минут
      // отдаем нужный набр переменных для сайта
      callback(application.constants[client.host]);
    };

    Ну и в /config/hosts.js настраиваем все на одно приложение:
    module.exports = [ '*' ];
    Ответ написан
    Комментировать
  • Как сделать возможность изменения кода приложений без перезагрузки основного приложения nodejs?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Как автор упомянутого сервера приложений, проясню ситуацию. Все остальные приведенные решения перестартовывают процессы. В лучшем случае они запускаются в режиме нескольких процессов (при помощи cluster или используя child_process) и перестартовывают дочерние процессы (worker), а родительский процесс (master) следит за изменениями и не перестартовывает. Это действительно дает нулевой даунтайм, что важно для продакшена, но не особо важно для разработки. А важно другое - удаляются из памяти все данные, все развернутое там состояние, закрываются соединения с БД, выгружаются библиотеки, да и все, что было проинициализировано при старте приложения, все полностью разрушится и перезагрузится. В Impress же подгружаются отдельные файлы, заменяя на лету в памяти предыдущий код. Это делается без eval, при помощи vm. При многочисленных изменениях он понимает, что меняется много файлов (например заливается новая версия приложения) ждет, когда эта активность прекратится, а потом обновит все одним махом. При частых изменениях одного и того же файла, может сложиться ситуация, когда в памяти будут параллельно находиться 2-3 копии одного кода. Дело в том, что в систему идет поток запросов, и старые запросы еще были запущены в момент, когда была предыдущая версия, и они не успели завершиться. Поэтому, нужно дождаться их завершения, а для новых уже можно использовать новую версию кода. Там есть еще много особенностей, о которых долго рассказывать. В общем, мне не известны другие реализации этого решения. Если они таки найдутся, то пришлите на сравнение. Приведенная же статья несколько устарела, для первичного ознакомления берите эту: habrahabr.ru/post/247543
    Ответ написан
    Комментировать