Ответы пользователя по тегу Node.js
  • Почему не работает gulp на OS X?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Это не ошибки, а предупреждения.

    https://github.com/gulpjs/gulp/issues/1571

    Ребята давно знают про проблему и работают над ее решением.

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

    # полностью удалить галп из под-рута
    
    sudo npm uninstall -g gulp
    
    # зайти к себе в .npm
    
    cd ~/.npm
    
    # посмотреть, кто чем владеет
    
    ls -la
    
    # аналогичным галпу образом убить все, что было поставлено под рутом
    # можно .npm снести целиком, но крайне нежелательно, 
    # т.к. есть симлинки и упоминания в других местах
    # после всей зачистки нужно проверить файлы 
    # на возможные упоминания директорий с npm
    # ~/.profile 
    
    cat  ~/.profile
    
    # и ~/.bash_profile
    
    cat  ~/.bash_profile
    
    # как только вы убедитесь, что 
    # все, что было поставлено с sudo вычищено
    # можно приступать к установке галп под пользователем
    
    # Шаг 1. ЗАБЫТЬ НАХРЕН ПРО sudo
    # sudo - это крайний шаг
    
    # Обязательно поставить nvm по инструкции
    # https://github.com/creationix/nvm
    
    # теперь можно поставить галп глобально
    npm install -g gulp
    
    # в каждом проекте создавать package.json
    # и в нем обязательно объявлять gulp в зависимостях
    # после этого делать БЕЗ sudo или глобальных установок
    
    cd your/project/dir
    
    npm install
    
    # будет вам щастье
    Ответ написан
  • Что лучше выбрать ratchet php или socket.io?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Поскольку ваш проект уже написан на PHP, используйте Ratchet и ZeroMQ. KISS ;-)
    Если нужно совсем enterprise, смотрите в сторону RabbitMQ.
    Кстати, коннекторы к очередям могут быть на разных языках написаны, например ультрабыстрые сокеты на Go-lang/Erlang для работы с телефонией и тусня в CRM на PHP.
    Ответ написан
  • Node.js и php - как совместить?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Возьмите socketo.me и добавьте веб-сокеты на страницу. Вместо zeroMQ можно redis pub/sub прикрутить, если хотите.
    Ответ написан
    Комментировать
  • Как сделать авторизацию vk с помощью oauth + node.js + angularjs?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Серверная авторизация довольно проста. Для начала нужно разобраться, как работает OAuth. Большая часть потока происходит на серверной стороне и редирект принимает серверная сторона, а не клиентская. Т.е. ангуляру вообще пофиг на редирект в целом, но он должен понимать, что сессия как-то была начата, за это должно отвечать API (Node.js).
    Вам поможет вот эта штучка https://github.com/stevebest/passport-vkontakte

    На клиенте обычно все реализуется через сервис или фабрику.
    Вначале вы получаете от вашего сервера ссылку, а затем перенаправляете пользователя в вк, после возврата из вк ваша серверная сторона проверяет, что все ок или нет, сохраняет где-то все внутри у себя. Потом делает редирект на SPA. Как только SPA загружена, она запрашивает от сервера, как успехи в авторизации, сервер отвечает. Далее ваша бизнес-логика.

    Очень важно строго следовать правилам OAuth и не передавать токен пользователя на клиент.

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

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Начните с имплементации на том языке, который вы лучше всего знаете.
    Если вам нужно реально быстро, то добро пожаловать в мир C, Go-lang, Erlang.
    Если просто нужно освоить новую технологию, то PHP и Node.js вам пригодятся.

    В целом рекомендовал бы для начала классическую связку между Socket.Io, Node.Js и MongoDB
    Ответ написан
    Комментировать
  • Как работать со стримом в Gulp.js?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вынесите загрузку на FTP в отдельный таск. Затем связывайте ее через runSequence.
    Ответ написан
    Комментировать
  • Не убьёт ли WebAssembly node.js?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Нет. Вы путаете клиентскую сторону и серверную.
    node.js предназначена для работы на сервере. WebAssembly - запуск ресурсоемких приложений на клиенте.
    Ответ написан
    Комментировать
  • Как грамотно оформить продакшен?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    1. Cron
    2. Сборка через Capistrano, обновление DNS в AWS Route 53 через AWS API
    3. Когда Node.js запустилось, оно триггерит push в SNS и показывает лайв пользователю.
    Ответ написан
    1 комментарий
  • Как правильно спроектировать MYSQL для чата на node.js?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вы неправильно рассматриваете систему чатов.
    В чатах есть комнаты, внутри комнат сообщения и участники.
    Тет-а-тет это приватная комната с 2-ми участникам.

    room 
    - id
    - name
    - private
    
    participant (участник чата)
    - id
    - name
    
    roster (список участников чата)
    - room_id
    - participant_id
    
    history (история сообщений)
    - id
    - room_id
    - participant_id
    - timestamp
    - type (тип сообщения, иногда нужны системные сообщения от ботов)
    - text
    - deleted


    А теперь вперед - учить JOIN'ы!

    По поводу нагрузки - при правильном проектировании приложения, нагрузка на базу будет минимальной, преимущественно проверки, кто принадлежит к какой комнате и запись в историю.
    Сколько-нибудь значимая нагрузка будет при 10к человек онлайн. Поверьте, это очень большая посещаемость.
    При большей посещаемости ваша проблема будет решена горизонтальным масштабированием (шардингом БД).
    Ответ написан
    Комментировать
  • Почему mongodb не выдает больше 100 записей?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вам нужно использовать курсор здесь.

    var findMacs = function(db, callback) {
       var cursor =db.collection('allowedmacs').find( );
       cursor.each(function(err, doc) {
          assert.equal(err, null);
          if (doc != null) {
             console.dir(doc);
          } else {
             callback();
          }
       });
    };
    
    MongoClient.connect(url, function(err, db) {
      assert.equal(null, err);
      findMacs(db, function() {
          db.close();
      });
    });
    Ответ написан
  • Как из cordova работать с rabbitmq?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Не совсем так. RabbitMQ - система очередей сообщений, которая работает на сервере.

    Почитайте, как работают уведомления
    https://firebase.google.com/docs/cloud-messaging/

    Приложение на клиенте должно отправлять подтверждение на сервер о доставке, для этого нужно отправляет сообщение с данными, чтобы ОС разбудила приложение и приложение отправило подтверждение получения.

    Логика на сервере должна быть такая - отправил уведомление устройству, ждем подтверждение 15 минут, если нет, то отправляем повторно. Если все равно нет подтверждения - маркируем устройство недоступным и больше не шлем уведомлений. После запуска приложения пользователем, отправляем запрос на сервер и активируем устройство.
    Ответ написан
    2 комментария
  • SocketIO + Laravel + Redis + MySQL. как быть?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    На мой взгляд здесь Laravel пришит сбоку с припеку. Node.js умеет работать с MySQL.
    Я бы подобный сервис реализовал следующим образом:
    Node.js в качестве основного сервера с API и траспортом данных через Socket.io.
    Redis в качестве шины сообщений между инстансами Node.js сервера.
    Веб-сокеты позволяют обмен данными и пересылку файлов. Ajax в целом вам тут и не нужен.

    IMHO, отправка сообщения должна выглядеть следующим образом:
    Node.js принимает сообщение из сокетов, выдает идентификатор сообщению и далее передает его по шине сообщений (Redis). На шине несколько слушателей, один из которых отвечает за сохранение данных в базе, а другие рассылают сообщения клиентам.

    Заявка в друзья выглядит следующим образом:
    Node.js принимает сообщение из веб-сокетов, сохраняет в базу, отправляет запрос по шине сообщений получателю.

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

    Хочу добавить пару моментов, которые нужно учитывать при разработке приложения.
    1. У вас может быть запущено несколько инстансов приложения как на одном сервере, так и на разных.
    2. Нужно контролировать момент, когда система пытается переотправить сообщение в случае потери соединения с инстансом - часто случается при ненадежном соединении с сетью, особенно в мобильных сетях.
    Ответ написан
    1 комментарий
  • Как автоматизировать разработку бота для FB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Запроксируйте запросы через ngrok на локальный сервер https://ngrok.com/
    Потом зеркалируйте трафик на локальную машину https://goreplay.org/

    Сделайте SSL сертификат для рабочего сервера. Например у cloudflare можно получить его бесплатно и Facebook с ним точно работает (сам пользуюсь).
    Далее вам нужно сделать простую вещь - сделайте простой скрипт, который будет просто складывать запросы от Facebook в базу сырыми (просто параметры и текст из php://input).
    Дальше делаете на локалке скрипт, который просто принимает сырой текст на вход и отлаживаете его.
    Получается у вас 2 кусочка - приемник и обработчик. Приемник получается очень простым (там буквально 10 строк).
    Ну а обработчик уже отлаживаете подавая на вход текст из базы.

    Из опыта скажу - иногда фейсбук задваивает события, иногда пропускает. Это редко, но случается, поэтому полагаться на веб-хуки на 100% нельзя. Имейте это ввиду.
    Ответ написан
    2 комментария
  • Индексы в MongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    If you call multiple createIndex() methods with the same index specification at the same time, only the first operation will succeed, all other operations will have no effect.

    https://docs.mongodb.com/manual/reference/method/d...

    Вообще ни на что не влияет.
    Ответ написан
    Комментировать
  • Как сделать поминутный учет работы скрипта?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    time -p python script.py --config user1.json
    Ответ написан
    Комментировать
  • Как организовать потоковую передачу с Amazon S3 на клиент?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    На работе был случай с подобным решением, но только вместо видео были документы и картинки. Очень быстро был забит канал под завязку (тоже в облаке Amazon).
    В вашем случае лучший вариант использовать оптимизированный для раздачи видео CDN, т.к. при должной посещаемости ширина канала будет исчерпана очень быстро.
    Ответ написан
    Комментировать
  • Сложно ли написать свой блог на nodejs?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Пройдите бесплатный курс https://university.mongodb.com/courses/M101JS/about и вас научат делать блог на ноде и монге.
    Ответ написан
    2 комментария