В Херсоне научились писать на Node.js - IT talk

advertisement
О себе
Александр Кучеренко
• В 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: kucherenko.email@gmail.com
Download