О себе Александр Кучеренко • В DataArt почти год • Занимаюсь программированием 7+ лет • За это время писал на: PHP, JavaScript, ActionScript3, C#, Java(Android), Objective-C Node JS проблемы надежности, и пути их решения (Мой личный опыт) Node JS + 1. 2. 3. 4. 5. 6. Весело писать код. Огромное количество готовых решений. Перспективно. Легко разворачивать, легко писать. Возможен прирост производительности. Модно. Node JS 1. 2. 3. 4. Не надежно. Утечки памяти. Слишком быстро развивается. Сложные вещи делать сложно. Node JS Стоит ли связываться? Есть ли необходимость именно в Node JS? Нужно шарить код между бекендом и фронтендом? Возможно вашу задачу можно решить на Python, Ruby… PHP (если не стыдно) Node JS Охота на Exceptions Exceptions В JavaScript код может выполняться: Синхронно Асинхронно Exceptions Синхронный Exceptions Асинхронный Exceptions Почему это важно? Exceptions Это работает: Exceptions А это уже нет: Exceptions Можно вот так: Но это ловит ошибки всего процесса Node JS Нам нужен асинхронный try… Domain API Domain API Domain API Best practice Не используйте throw в вашем коде!! В Node JS принято возвращать ошибки первым параметром в callback Best practice Ошибка в асинхронном коде: Best practice Best practice Ошибка в синхронном коде: Best practice Best practice Если мы все будем делать правильно то наше приложение не будет падать? Не все так просто мой друг… Best practice Ваше приложение после npm install Best practice Если вы поймали эксепешен в Node JS, то лучше всего завершить процесс! Best practice А что может плохого случится если я не буду завершать процесс? Ну к примеру у тебя кончилась память… Node JS Process User Node JS Process User User Node JS Process User Node JS Process User User Cluster API Cluster API Cluster API Node JS Master Process User Node JS Worker Process User Node JS Worker Process User User Node JS Worker Process User Cluster API Node JS Master Process User Node JS Worker Process User Node JS Worker Process User User Node JS Worker Process User Cluster API Cluster API isWorker ? server.js YES Domain Domain Domain NO Start worker Worker.js Worker.js Worker.js Master.js Domain cluster.fork([env]) YES Need more workers? NO server.listen() Cluster API pm.createWorker() Master Process Manager worker = cluster.fork() Worker worker.listen(readyEvent) worker.listen(taskDoneEvent) Workers pool Worker Worker Worker worker.listen(errorEvent) process.exit(1) pm.createWorker() Cluster API pm.executeTask() Workers pool Worker Worker Worker Master Process Manager worker.send(textMessge) Worker do some work process.send(textMessge) Вопросы Ссылочки Node JS API: http://nodejs.org/api/domain.html http://nodejs.org/api/cluster.htm Мой Github: https://github.com/AlexTiTanium Email: [email protected]