рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдЬреЙрд░реНрдЬ рд░рд╛рдореЛрди рдХреЗ "рдиреЙрдб.рдЬреЗрдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ" рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред

рдЖрдЬрдХрд▓, Node.js рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреБрд╢рд▓ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ REST API рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдбреЗрд╕реНрдХрдЯреЙрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ IoT рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдореИрдВ 6 рд╡рд░реНрд╖реЛрдВ рд╕реЗ Node.js рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдкреЛрд╕реНрдЯ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдмрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Node.js рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ !!
рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА:
Node.js рд╕реЗ рдкрд╣рд▓реЗ рдХреА рджреБрдирд┐рдпрд╛
рдмрд╣реБрд╕реНрддрд░реАрдп рд╕рд░реНрд╡рд░
рдХреНрд▓рд╛рдЗрдВрдЯ / рд╕рд░реНрд╡рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдмрд╛рдж рд▓рд┐рдЦреЗ рдЧрдП рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕ рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдореЙрдбрд▓ рдкреНрд░рднрд╛рд╡реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рдореЗрдореЛрд░реА, рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп, рдЖрджрд┐) рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдХреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рд╕рдЪ рдореЗрдВ рдирд╣реАрдВ! рдЬрдм рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдирдпрд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдмрдирд╛рддрд╛ рд╣реИред
рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдкреНрд░рд╡рд╛рд╣ , рд╡рд╣ рд╕рдордп рдФрд░ рд╕рдВрд╕рд╛рдзрди рд╣реИ рдЬреЛ рд╕реАрдкреАрдпреВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рдХреЗ рд╕рд╛рде, рд╕рд░реНрд╡рд░ рдПрдХ рд╕рдордп рдореЗрдВ рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддрд┐ рдзрд╛рдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдореЙрдбрд▓ рдХреЛ рдереНрд░реЗрдб-рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз рдореЙрдбрд▓ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдХреЛ рдПрди рдереНрд░реЗрдбреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рдПрди + 1 рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдЙрдкрд▓рдмреНрдз рди рд╣реЛ рдЬрд╛рдПред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ 4 рдЕрдиреБрд░реЛрдзреЛрдВ (рдереНрд░реЗрдбреНрд╕) рддрдХ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрдм рдЗрд╕реЗ рдЕрдЧрд▓реЗ 3 рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ 4 рдзрд╛рдЧреЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗред
рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╕рд░реНрд╡рд░ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди (рдореЗрдореЛрд░реА, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░, рдЖрджрд┐) рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ ...ред
рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рддрдХрдиреАрдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред
рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛
рд╕рд░реНрд╡рд░ рдкрд░ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдЖрдкрдиреЗ рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдзрд╛рдЧрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? I / O рд╕рдВрдЪрд╛рд▓рди рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рднреАред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдкреГрд╖реНрда рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ http://yourstore.com/products рдкрд░ рджрд╕реНрддрдХ рджреЗ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ HTML рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдмрд┐рд▓реНрдХреБрд▓ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛?
рд▓реЗрдХрд┐рди рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
- рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
/products
рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдпрд╛ рдХрд╛рд░реНрдп рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ (рдЖрдкрдХрд╛ рдпрд╛ рдЖрдкрдХрд╛ рдврд╛рдВрдЪрд╛) рдЕрдиреБрд░реЛрдз URL рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдзрд┐ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИред рдзрд╛рд░рд╛ рдЪрд▓ рд░рд╣реА рд╣реИ ред 
- рдЕрдм рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ, рдереНрд░реЗрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

- рдЪреВрдВрдХрд┐ рдЖрдк рдПрдХ рдЕрдЪреНрдЫреЗ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рдЖрдк рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдЧ рдХреЛ рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд░рд╛рдЙрдЯрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ / рдлрд╝рдВрдХреНрд╢рди рдХрд░рддрд╛ рд╣реИ - рдЖрдк рд▓рд╛рдЗрди "рдореЗрдердб рдПрдХреНрд╕ рдПрдХреНрдЬреАрдХреНрдпреВрдЯрд┐рдВрдЧ !!" рднреА рд▓реЙрдЧ рдСрди рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдСрдкрд░реЗрд╢рди рдХреЛ рд░реЛрдХ рд░рд╣рд╛ рд╣реИред рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ ред

- рд╕рднреА рд▓реЙрдЧ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЗрдиреЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИрдВред рдзрд╛рдЧрд╛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ред

- рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рд╕рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп - рдПрдХ рд╕рд░рд▓ рдХреНрд╡реЗрд░реА рдЬреИрд╕реЗ
SELECT * FROM products
рдЕрдкрдирд╛ рдХрд╛рдо рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпрд╛? рд╣рд╛рдВ, рдпрд╣ рдПрдХ рдЕрд╡рд░реБрджреНрдз I / O рдСрдкрд░реЗрд╢рди рд╣реИред рдзрд╛рд░рд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реА рд╣реИ ред 
- рдЖрдкрдХреЛ рдПрдХ рд╕рд░рдгреА рдпрд╛ рд╕рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдпрд╣ рд╕рдм рдЧрд┐рд░рд╡реА рд░рдЦрд╛ рд╣реИред рдзрд╛рд░рд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реА рд╣реИ ред

- рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рднреА рдЙрддреНрдкрд╛рдж рд╣реИрдВ рдФрд░ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдзрд╛рд░рд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реА рд╣реИ ред

- рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИред рдзрд╛рдЧрд╛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ред

- рдкреНрд░рд╡рд╛рд╣ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдЬреИрд╕реЗ рдЖрдХрд╛рд╢ рдореЗрдВ рдкрдХреНрд╖реАред

I / O рдСрдкрд░реЗрд╢рди рдХрд┐рддрдиреЗ рдзреАрдореЗ рд╣реИрдВ? рд╡реИрд╕реЗ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рддрд╛рд▓рд┐рдХрд╛ рджреЗрдЦреЗрдВ:
рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдбрд┐рд╕реНрдХ рд░реАрдб рдСрдкрд░реЗрд╢рди рдмрд╣реБрдд рдзреАрдореЗ рд╣реИрдВред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрд╛рд╣рд░реА API рд╕реЗ рдХрд┐рддрдиреЗ рдЕрдиреБрд░реЛрдз рдпрд╛ рдХреЙрд▓ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: I / O рд╕рдВрдЪрд╛рд▓рди рдереНрд░реЗрдб рдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдФрд░ рдЕрдкрд╢рд┐рд╖реНрдЯ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рддреЗ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ C10K
рд╕рдорд╕реНрдпрд╛
C10k (engред C10k; 10k рдХрдиреЗрдХреНрд╢рди - 10 рд╣рдЬрд╛рд░ рдХрдиреЗрдХреНрд╢рди рд╕рдорд╕реНрдпрд╛)
2000 рдХреЗ рджрд╢рдХ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдорд╢реАрдиреЗрдВ рдзреАрдореА рдереАрдВред рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдПрдХ рд╣реА рдорд╢реАрди рд╕реЗ 10,000 рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИред
рд▓реЗрдХрд┐рди рдкрд╛рд░рдВрдкрд░рд┐рдХ рдзрд╛рдЧрд╛-рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз рдореЙрдбрд▓ (рдЕрдиреБрд░реЛрдз рдкрд░ рдзрд╛рдЧрд╛) рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛? рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдереЛрдбрд╝рд╛ рдЧрдгрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐ рд╕реНрдЯреНрд░реАрдо 1 рдПрдордмреА рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЫреЛрдбрд╝рдХрд░ - 10 рд╣рдЬрд╛рд░ рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП, 10 рдЬреАрдмреА рд░реИрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░реАрдо рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рд╣реИред рд╣рд╛рдБ, рдФрд░ рдордд рднреВрд▓рдирд╛, рд╣рдо 2000 рдХреЗ рджрд╢рдХ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реИрдВ !!

рдЖрдЬ, рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреНрдпреВрдЯрд░ рддреЗрдЬреА рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдпрд╛ рд░реВрдкрд░реЗрдЦрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдПрдХ рдорд╢реАрди рдкрд░ 10 рдорд┐рд▓рд┐рдпрди рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рд╕рдорд╕реНрдпрд╛ рдлрд┐рд░ рд╕реЗ рд▓реМрдЯрддреА рд╣реИ (рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ C10M рд╕рдорд╕реНрдпрд╛ рд╣реИ )ред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдЪрд╛рд╡?
рд╕рд╛рд╡рдзрд╛рдиреА рд╕реНрдкреЛрдЗрд▓рд░
!!!
Node.js рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ C10K рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдХреИрд╕реЗ?!
2000 рдХреЗ рджрд╢рдХ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреБрдЫ рдирдпрд╛ рдФрд░ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рдерд╛, рдЙрд╕ рд╕рдордп рдЬреЗрд╡реАрдПрдо (рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди) рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереЗ - рд░рд┐рдВрдЧреЛрдЬреЗрдПрд╕ рдФрд░ рдЕрдкреНрдкрдЬрд╛рдЗрдирдЬреЗрдПрд╕, рдЬреЛ рдереНрд░реЗрдб-рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз рдореЙрдбрд▓ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ Node.js рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! " рд╕рднреА рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╣реИ ред
Node.js рдФрд░ рдИрд╡реЗрдВрдЯ рд▓реВрдк
Node.js
Node.js рдПрдХ рд╕рд░реНрд╡рд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ рдЬреЛ Google Chrome рдЗрдВрдЬрди - V8 рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
Node.js рдПрдХ рдЗрд╡реЗрдВрдЯ-рд╕рдВрдЪрд╛рд▓рд┐рдд рдореЙрдбрд▓ рдФрд░ рдПрдХ рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ I / O рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╣рд▓реНрдХрд╛ рдФрд░ рдХреБрд╢рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдИ рдврд╛рдВрдЪрд╛ рдирд╣реАрдВ рд╣реИ, рди рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдпрд╣ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдирдЯрд╛рдЗрдо рд╣реИред
рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ i / o
Node.js рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ:
- рдореБрдЦреНрдп рдзрд╛рдЧрд╛ I / O рд╕рдВрдЪрд╛рд▓рди рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред
- рд╣рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЪрд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рдПрдХ HTML рдкреЗрдЬ рдХреЛ /home
рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП - 'рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб'ред HTML рдкреЗрдЬ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред
home.html
<html> <body> <h1>This is home page</h1> </body> </html>
index.js
const http = require('http'); const fs = require('fs'); const server = http.createServer(function(request, response) { if (request.url === '/home') { fs.readFile(`${ __dirname }/home.html`, function (err, content) { if (!err) { response.setHeader('Content-Type', 'text/html'); response.write(content); } else { response.statusCode = 500; response.write('An error has ocurred'); } response.end(); }); } else { response.write('Hello World'); response.end(); } }); server.listen(8080);
рдпрджрд┐ рдЕрдиреБрд░реЛрдзрд┐рдд рдпреВрдЖрд░рдПрд▓ /home
, рддреЛ home.html
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╢реА fs
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ http.createServer
рдФрд░ fs.readFile
рдореЗрдВ http.createServer
рдХрд╛рд░реНрдп рдХреЙрд▓рдмреИрдХ рд╣реИрдВ ред рдпреЗ рдлрд╝рдВрдХреНрд╢рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдкрд╣рд▓рд╛, рдЬреИрд╕реЗ рд╣реА рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛, рдЬрдм рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд┐рд╕реНрдХ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрдлрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЬрдмрдХрд┐ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХ рд╕реЗ рдкрдврд╝реА рдЬрд╛ рд░рд╣реА рд╣реИ, Node.js рдЕрдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдм рдПрдХ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ ... рд▓реЗрдХрд┐рди рдХреИрд╕реЗ!
рдШрдЯрдирд╛ рдкрд╛рд╢
рдЗрд╡реЗрдВрдЯ рд▓реВрдк рд╡рд╣ рдЬрд╛рджреВ рд╣реИ рдЬреЛ Node.js. рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИ рдпрд╣ рд╡рд╕реНрддреБрддрдГ рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдзрд╛рдЧрд╛ рд╣реИред
Libuv рдПрдХ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ рдФрд░ Node.js. рдХрд░реНрдиреЗрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЖрдк рдпрд╣рд╛рдБ libuv рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдШрдЯрдирд╛ рдЪрдХреНрд░ рдореЗрдВ 6 рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ, рд╕рднреА 6 рдЪрд░рдгреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдПрдХ рдЯрд┐рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

- рдЯрд╛рдЗрдорд░ : рдЗрд╕ рдЪрд░рдг рдореЗрдВ,
setTimeout()
рдФрд░ setInterval()
рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; - рд▓рдВрдмрд┐рдд рдХреЙрд▓рдмреИрдХ : рд▓рдЧрднрдЧ рд╕рднреА рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ,
close
рдШрдЯрдирд╛рдУрдВ, рдЯрд╛рдЗрдорд░ рдФрд░ setImmediate()
; - рдирд┐рд╖реНрдХреНрд░рд┐рдп, рддреИрдпрд╛рд░ : рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдкреЛрд▓ : рдирдП I / O рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ Node.js рдмреНрд▓реЙрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ;
- рдЬрд╛рдБрдЪ рдХрд░реЗрдВ : рдЗрд╕ рдЪрд░рдг рдореЗрдВ
setImmediate()
рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░рдг рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; - рдХрд░реАрдм рдХреЙрд▓рдмреИрдХ : рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
socket.on('close', ...)
;
рдареАрдХ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдзрд╛рдЧрд╛ рдПрдХ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕рднреА I / O рдХреМрди рдХрд░рддрд╛ рд╣реИ?
рдзреНрдпрд╛рди рджреЛ
!!!
рдЬрдм рдПрдХ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ I / O рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡рд╣ рдереНрд░реЗрдб рдкреВрд▓ рд╕реЗ OS рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЙрд▓рдмреИрдХ рд▓рдВрдмрд┐рдд рдХреЙрд▓рдмреИрдХ рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдкрдВрдХреНрддрд┐рдмрджреНрдз рд╣реЛрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ?
рд╕реАрдкреАрдпреВ-рдЧрд╣рди рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛
Node.js рдПрдХрджрдо рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ! рдЖрдк рдЬреЛ рдЪрд╛рд╣реЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рд╛рдЗрдо рдирдВрдмрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рд▓рд┐рдЦреЗрдВред
рдПрдХ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ (рдкреНрд░рд╛рдХреГрддрд┐рдХ) рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ 1 рдФрд░ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдФрд░ рд╡рд┐рднрд╛рдЬреНрдп рд╣реИред
рдПрдХ рдирдВрдмрд░ рдПрди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдПрдкреАрдЖрдИ рдХреЛ рд╕реВрдЪреА (рдпрд╛ рд╕рд░рдгреА) рдореЗрдВ рдкрд╣рд▓реЗ рдПрди primes рдХреА рдЧрдгрдирд╛ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
primes.js
function isPrime(n) { for(let i = 2, s = Math.sqrt(n); i <= s; i++) { if(n % i === 0) return false; } return n > 1; } function nthPrime(n) { let counter = n; let iterator = 2; let result = []; while(counter > 0) { isPrime(iterator) && result.push(iterator) && counter--; iterator++; } return result; } module.exports = { isPrime, nthPrime };
index.js
const http = require('http'); const url = require('url'); const primes = require('./primes'); const server = http.createServer(function (request, response) { const { pathname, query } = url.parse(request.url, true); if (pathname === '/primes') { const result = primes.nthPrime(query.n || 0); response.setHeader('Content-Type', 'application/json'); response.write(JSON.stringify(result)); response.end(); } else { response.statusCode = 404; response.write('Not Found'); response.end(); } }); server.listen(8080);
prime.js
рдЖрд╡рд╢реНрдпрдХ рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ: isPrime
рдлрд╝рдВрдХреНрд╢рди рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ рдЕрднрд╛рдЬреНрдп рд╣реИ, рдФрд░ nthPrime N рдХреЛ рдРрд╕реЗ рдирдВрдмрд░ рджреЗрддрд╛ рд╣реИред
index.js
рдлрд╝рд╛рдЗрд▓ рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз /primes
рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП prime.js
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред URL рдореЗрдВ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирдВрдмрд░ N рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ 20 рдЕрдкрд░рд╛рдзреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ http://localhost:8080/primes?n=20
рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рдЧреНрд░рд╛рд╣рдХ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджрд╕реНрддрдХ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ I / O API рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
- рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ 5 рд╕реЗрдХрдВрдб рд╣рд░ рд╕реЗрдХрдВрдбред
- рджреВрд╕рд░рд╛ рд╣рд░ рд╕реЗрдХрдВрдб 1000 рдкреНрд░рд╛рдЗрдо рдорд╛рдВрдЧрддрд╛ рд╣реИ
- рддреАрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ 10,000,000,000 рдкреНрд░рд╛рдЗрдо, рд▓реЗрдХрд┐рди ...
рдЬрдм рддреАрд╕рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реАрдкреАрдпреВ-рдЧрд╣рди рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖рдг рд╣реИ ред рдЬрдм рдореБрдЦреНрдп рдзрд╛рдЧрд╛ "рднрд╛рд░реА" рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреБрд░реНрдЧрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд▓рд┐рдмрд╡реВ рдХрд╛ рдХреНрдпрд╛? рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, рддреЛ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА Node.js рдХреЛ рдореБрдЦреНрдп рдереНрд░реЗрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП OS рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдФрд░ рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИрдВ, рдпрд╣ рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред C ++ рдЗрд╕рд▓рд┐рдП libuv рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, v10.5 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рджреЗрд╢реА рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдереНрд░реЗрдбреНрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ Node.js. рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рд╡рд╛рд╣
рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ:
рд╕реАрдкреАрдпреВ-рдЧрд╣рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░рдорд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ; рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Node.js рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рддрдВрддреНрд░ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред
рдХреЛрдб рдареАрдХ рдХрд░реЗрдВ
рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ:
primes-workerthreads.js
const { workerData, parentPort } = require('worker_threads'); function isPrime(n) { for(let i = 2, s = Math.sqrt(n); i <= s; i++) if(n % i === 0) return false; return n > 1; } function nthPrime(n) { let counter = n; let iterator = 2; let result = []; while(counter > 0) { isPrime(iterator) && result.push(iterator) && counter--; iterator++; } return result; } parentPort.postMessage(nthPrime(workerData.n));
index-workerthreads.js
const http = require('http'); const url = require('url'); const { Worker } = require('worker_threads'); const server = http.createServer(function (request, response) { const { pathname, query } = url.parse(request.url, true); if (pathname === '/primes') { const worker = new Worker('./primes-workerthreads.js', { workerData: { n: query.n || 0 } }); worker.on('error', function () { response.statusCode = 500; response.write('Oops there was an error...'); response.end(); }); let result; worker.on('message', function (message) { result = message; }); worker.on('exit', function () { response.setHeader('Content-Type', 'application/json'); response.write(JSON.stringify(result)); response.end(); }); } else { response.statusCode = 404; response.write('Not Found'); response.end(); } }); server.listen(8080);
index-workerthreads.js
, рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ /primes
Worker
рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ (рджреЗрд╢реА рдореЙрдбреНрдпреВрд▓ worker_threads
) primes-workerthreads.js
рдореЗрдВ primes-workerthreads.js
рдХреЛ рдЕрдкрд▓реЛрдб рдФрд░ primes-workerthreads.js
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЬрдм primes рдХреА рд╕реВрдЪреА рдХреА рдЧрдгрдирд╛ рдФрд░ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ message
рдШрдЯрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ - рдкрд░рд┐рдгрд╛рдо рдореБрдЦреНрдп рдзрд╛рд░рд╛ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ, рд╡рд╣ exit
рдШрдЯрдирд╛ рдХреЛ рднреА рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореБрдЦреНрдп рдзрд╛рд░рд╛ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
primes-workerthreads.js
рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЧрдпрд╛ред рдпрд╣ workerData
рдЖрдпрд╛рдд workerData
(рдпрд╣ рдореБрдЦреНрдп рдереНрд░реЗрдб рд╕реЗ рдкрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╣реИ) рдФрд░ parentPort
рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ рд╡рд╛рдкрд╕ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдлрд┐рд░ рд╕реЗ рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ
рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдЕрдм рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИ
!!!!!
рдЕрдм рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдЕрднреА рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдереНрд░реЗрдб рдмрдирд╛рдирд╛ рдПрдХ рд╕рд╕реНрддрд╛ рдЖрдирдВрдж рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдереНрд░реЗрдб рдкреВрд▓ рдмрдирд╛рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
Node.js рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕реЗ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд┐рдлрд╛рд░рд┐рд╢ - рд╣рдореЗрд╢рд╛ рдЙрддреНрд╕реБрдХ рд░рд╣реЗрдВ! рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрджрд░ рд╕реЗ рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЬ рдХреЗ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдкреЛрд╕реНрдЯ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдереА рдФрд░ рдЖрдкрдиреЗ Node.js. рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрд╛
рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХреЛ рдЕрдЧрд▓реА рдкреЛрд╕реНрдЯреЛрдВ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред
ред