рдПрдХ рднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕рдЪрдореБрдЪ рд╣рд░ рд╣рдлреНрддреЗ Node.js рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ "рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ" рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреБрдЫ рдРрд╕рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЕрдЧрд▓рд╛ рдврд╛рдВрдЪрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Node.js I / O рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ? рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рдХрд░ рд╕рдХрддреА рд╣реИ рдХрд┐ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рднрд╛рд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред рдХреБрдЫ рдореМрд▓рд┐рдХ рд╕реБрдзрд╛рд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдХреЛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЧрд╣рд░реЗ рд╕реНрддрд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдиреЛрдб рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирдП рдЕрдореВрд░реНрдд рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

Node.js рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ?
рд╕реНрдерд┐рддрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдПрдХреНрд╕рдкреНрд░реЗрд╕ Node.js. рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдпрд╣ рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреА рдорд╛рдирдХ рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд┐рд░реНрдорд┐рдд рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ URL рдорд╛рд░реНрдЧреЛрдВ, рдорд╛рдкрджрдВрдбреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рд░рд▓ рд╣реИ, рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдХреА рдХрдореА рд╣реИ рд╡рд╣ рд╣реИ рдкреНрд░рджрд░реНрд╢рдиред рд▓рдЧрд╛рддрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ, рдЬреИрд╕реЗ рдХрд┐ Fastify, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдЬреИрд╕реА рд╣реА рдХреНрд╖рдорддрд╛рдПрдВ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдо рдкреНрд░рджрд░реНрд╢рди рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рд╡реЗ рд╕реНрд╡рдпрдВ рд╣реИрдВ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреБрд░реА рддрд░рд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рд╕реАрдорд┐рдд рд╣реИрдВ рдЬреЛ Node.js. рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ, рдЗрддрдирд╛ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрд╡рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛рд▓рд╛рд▓ рд░реЗрдЦрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рдЕрдзрд┐рдХрддрдо рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо Node.js. рд╣реИред рдЙрд╕рдХреЗ рд▓рд┐рдП, рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдореЗрдВ "рддреЗрдЬ" рд╢рдмреНрдж рд╣реЛ рдпрд╛ рдирд╣реАрдВ, рд╡реЗ рдЗрд╕ рд░реЗрдЦрд╛ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕реАрдорд╛ рд╣реИ рдЬрдм рдЧреЛрд▓рдВрдЧ рдЬреИрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде Node.js рдордВрдЪ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Node.js C ++ рдРрдб-рдСрди, Google V8 рдмрд╛рдЗрдВрдбрд░реНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ C ++ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХрд┐рд╕реА рднреА рддрдВрддреНрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпреЗ рддрдВрддреНрд░ Node.jpg рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реЛрдВред
рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдирдП рд╕реНрддрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ Google V8 рдЗрдВрдЬрди рд╕реЗ рд╕рдВрднрд╡ рд╣рд░ рдЪреАрдЬ рдХреЛ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ Node.js рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред
╬ЬWebSockets.js рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдЗрд╕ рдорд╣реАрдиреЗ рдХреА
рд╢реБрд░реБрдЖрдд рдореЗрдВ , рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрд╛рд░реА рдХрд┐рдпрд╛ -
ocketsрд╡реЗрдмрд╕реЙрдХреЗрдЯреНрд╕.рдЬреЗрдПрд╕ ред GitHub рдХреЛ рдЗрд╕рдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, npm рдкрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ node.js рдХреЗ рд▓рд┐рдП n рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
npm install uNetworking/uWebSockets.js#v15.0.0
SWebSockets.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓рд┐рдирдХреНрд╕, рдореИрдХрдУрдПрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг 15.0.0 рд╣реИ, рд╡рд░реНрдЬрди рдирдВрдмрд░рд┐рдВрдЧ рдХреЛ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
webWebSockets.js рдЬреЗрдПрд╕ рдореЗрдВ рд▓рд┐рдЦреЗ рдмреИрдХрдПрдВрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реИред рдЗрд╕рдореЗрдВ C рдФрд░ C ++ рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 6 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЧреЛрд▓рдВрдЧ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, bitfinex.com рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рджреЛрдиреЛрдВ рдЯреНрд░реЗрдбрд┐рдВрдЧ рдПрдкреАрдЖрдИ (REST рдФрд░ WebSocket) рдХреЛ ocketsWebSockets.js рдкрд░ рдкреЛрд░реНрдЯ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкреЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред Bitfinex рдХрд╛ Paolo Ardoino рдиреЛрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИред рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ jWebSockets.js рдХреЛ рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдерд╛, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд┐рдЯрдореЗрдХреНрд╕, рдмрд┐рдЯрдлрд┐рдиреЗрдХреНрд╕ рдФрд░ рдХреЙрдЗрдирдмреЗрд╕ рджреНрд╡рд╛рд░рд╛ рдореБрдЭреЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рдорд░реНрдерди рдХреЗ рдХрд╛рд░рдг рд╣реИред
OfWebSockets.js рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
projectWebSockets.js Apache 2.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдЬрд╛рд░реА рдХреА рдЧрдИ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬреЛ "uws" рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдиреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ Google V8 рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рд╕реНрдЯреИрдХ рд╣реИ, рдЬреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░ рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ Node.js рдХреА рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ рдФрд░ Node.js. рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░, рд╕реБрд░рдХреНрд╖рд┐рдд, рдорд╛рдирдХреЛрдВ-рдЕрдиреБрдкрд╛рд▓рди, рддреЗрдЬ рдФрд░ рд╣рд▓реНрдХреЗ I / O рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде JS рдПрдкреНрд▓реАрдХреЗрд╢рди рдХрд╛ рдЗрдВрдЯрд░реЗрдХреНрд╢рди ocketsWebSockets.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

OcketsWebSockets.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдЬреЗрдПрд╕-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдИ рдкрд░рддреЗрдВ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкрд░рдд рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реА рдкрд░рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рд╕реБрдзрд╛рд░ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд╛рд░рдг рд╕рдорд╛рдзрд╛рди рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ layer
┬╡Sockets
рдкрд░рдд рдореЗрдВ рддреАрди рдЙрдк-рдкрд░рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЗрдЯрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рд╣реИрдВред рдпрд╣, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рд╕рдорд╛рдзрд╛рди рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдХреА рдЫрд╣ рд╕реМ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде
ssl.c
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓
ssl.c
ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд┐рд╕реНрдЯрдо рдХреА рдЕрдиреНрдп рдкрд░рддреЗрдВ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреА рд╣реИрдВ рдХрд┐ рдПрд╕рдПрд╕рдПрд▓ рдХреНрдпрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг рднреА рдХрд░рддрд╛ рд╣реИред
╬Ь рд╕реЙрдХреЗрдЯреНрд╕ рдЖрдВрддрд░рд┐рдХ рд╕рдмрд▓реЗрдпрд░реНрд╕рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ Node.js рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЛрдиреЛрд▓рд┐рдерд┐рдХ рдПрдХ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рд╣реА рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдк libuv рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб, рдФрд░ OpenSSL рдФрд░ V8 рдкрд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Node.js рдореЗрдВ рдпрд╣ рд╕рдм рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛрдИ рднреА рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ Node.js. рдореЗрдВ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИ
SWebSockets.js рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
╬ЬWebSockets.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕рд┐рд╕реНрдЯрдо рдХреА рдмреБрдирд┐рдпрд╛рджреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред
uWS.SSLApp({ key_file_name: 'misc/key.pem', cert_file_name: 'misc/cert.pem', passphrase: '1234' }).get('/hello', (res, req) => { res.end('Hello World!'); }).ws('/*', { open: (ws, req) => { console.log('A WebSocket connected via URL: ' + req.getUrl() + '!'); }, message: (ws, message, isBinary) => { let ok = ws.send(message, isBinary); }, drain: (ws) => { console.log('WebSocket backpressure: ' + ws.getBufferedAmount()); }, close: (ws, code, message) => { console.log('WebSocket closed'); } }).listen(port, (token) => { if (token) { console.log('Listening to port ' + port); } });
рдПрдХ рдЕрд░реНрде рдореЗрдВ, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ SSL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ senseWebSockets.js рдЧреЛрд░рд┐рд▓реНрд▓рд╛ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХреЛ рдмрд╛рдИрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЧреЛ рдкрд░ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рдмрд┐рдирд╛ред рдпрд╣реА рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдХреЛрдб рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рдмрд┐рдирд╛ SSL рдХреЗ рдЧреЛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдбред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рд╣реИред
рдлрд╛рд╕реНрдЯ рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ, рдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХреЗ рд╕рдордХрдХреНрд╖ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдмрд╣реБрдд рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджреАрдВ, рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд╡реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡реЗ, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреАрдореА рднреА рд╣реИрдВред
рд╡рд┐рднрд┐рдиреНрди рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдбреЗрд╡рд▓рдкрд░ рдЬрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд╡реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ, рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдпрд╣ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рддрдВрддреНрд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдиреЗ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╣реИред рдПрд╕рдПрд╕рдПрд▓ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдкреНрд░реЙрдХреНрд╕реА рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдпрд╣ рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХреЛрдИ HTTP рдЯреНрд░реИрдлрд╝рд┐рдХ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, SSL рдкрд░ WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред WebSocket рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╡реЗ рдХреЗрд╡рд▓ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдгрдпреЛрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред
SWebSockets.js рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛рдПрдВ рджреЗрдирд╛ рд╣реИ рддрд╛рдХрд┐ thatWebSockets.js рдХрд┐рд╕реА рднреА рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд░реИрдкрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕реЙрдХреЗрдЯ рдХреЛ рд╣рдЯрд╛ рд╕рдХреЗрдВред ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдЕрдЧрд░ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдЧреИрд░-рдорд╛рдирдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдИ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ ocketsWebSockets.js рдХреА рд╡рд░реНрдгрд┐рдд рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдмрд╣реБрдд рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдЙрди рдкрд░ рдЧрдВрднреАрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ (рдкрд░реАрдХреНрд╖рдг рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ ocketsWebSockets.js рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реЗрдбрд┐рд╕ рд╕реЗ рддреЗрдЬ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд▓рдХрд░ рд░рд╣реЗрдВред
рдкрд░рд┐рдгрд╛рдо
рд╡рд░реНрддрдорд╛рди рдореЗрдВ newWebSockets.js рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИрдВ, рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдареАрдХ рдХреА рдЧрдИ рд╣реИрдВред рдЙрди рдЫреЛрдЯреА-рдореЛрдЯреА рдЦрд╛рдорд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ рдЬреЛ рдирдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрдВред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ C рдФрд░ C ++ рдореЗрдВ рд▓рд┐рдЦреА рдХреЛрдб рдХреА рдХрдИ рд╣рдЬрд╛рд░реЛрдВ рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рддреАрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
рдпрд╣рд╛рдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реИрдкрд░ - uWebSockets.js рдирд┐рд╣рд┐рдд рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ - uWebSocketsред рдФрд░
рдпрд╣рд╛рдБ C - uSockets рдореЗрдВ рдЖрдзрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдВрдкрдирд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо I / O рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдкрд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рднрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрди рдХрдВрдкрдирд┐рдпреЛрдВ рдореЗрдВ, рд╕реНрдерд┐рд░рддрд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ SWebSockets.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?
