Angular рдореЗрдВ WebSockets: рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Angular Service рдмрдирд╛рдПрдВ

рдЫрд╡рд┐
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХреЛрдгреАрдп рдврд╛рдВрдЪреЗ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рд╕рдВрдХреАрд░реНрдг рджрд╛рдпрд░реЗ рдФрд░ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрднрд┐рдиреНрди рд╕рд╣рд╛рдпрдХ - RxJs рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЬрдмрдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рд╡рд┐рд╖рдп рд╣реИред

рдпрд╣ рдкрд╛рда рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдВрдЧреБрд▓рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдЧрд╣рд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реАред

WebSocket рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ


рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, WebSocket рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдкрд░ "рдбреБрдкреНрд▓реЗрдХреНрд╕ рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рдпрд╣ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдВрдЪрд╛рд░рд┐рдд рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ) рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
WebSocket рдХреЛ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдпрд╛ рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред WebSocket рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЯреАрд╕реАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИред рдпрд╣ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╡рд┐рддрд░рдг рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╡реЗрдм рд╕рд╛рдЗрдЯ рдХреЗ рдмреАрдЪ рдШрдирд┐рд╖реНрда рд╕рдВрдкрд░реНрдХ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред тАЭ

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, WebSocket рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдХрд┐рд╕реА рднреА рд╡рд╛рдВрдЫрд┐рдд рд╕рдордп рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдХреНрд▓рд╛рдЗрдВрдЯ) рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдорд╛рди рдЕрдзрд┐рдХрд╛рд░ рдФрд░ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдорд┐рд▓рддреА рд╣реИред рдПрдХ рдирд┐рдпрдорд┐рдд AJAX рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг HTTP рд╣реЗрдбрд░ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рд╡реГрджреНрдзрд┐, рдЬрдмрдХрд┐ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдХреЗрд╡рд▓ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рд╡реЗрдм рд╕реЙрдХреЗрдЯ HTTP рд╣реЗрдбрд░ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рд╕реВрдЪрдирд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕реИрдХрдбрд╝реЛрдВ рдФрд░ рд╣рдЬрд╛рд░реЛрдВ рдмрд╛рд░ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЙрд░реНрд╕ рдХреА рддрд░рд╣ рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░, рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдпрд╣ HTML5 WebSocket API рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рддреАрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ:

WebSocket - WebSocket рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдФрд░ рдлрд┐рд░ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛;
CloseEvent - рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ WebSocket рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рдПрдХ рдШрдЯрдирд╛;
MessageEvent - рдПрдХ рд╕рдВрджреЗрд╢ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдПрдХ WebSocket рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ JavaSript рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрддрд░ рдкрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

const ws = new WebSocket("ws://www.example.com/socketserver", "protocolOne"); ws.onopen = () => { ws.onmessage = (event) => { console.log(event); } ws.send("Here's some text that the server is urgently awaiting!"); }; 

onmessage - рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рд╕реБрдиреЗрдВ
рднреЗрдЬреЗрдВ - рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗрдВ

рдпрд╣реА рд╣реИ, рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдордбреАрдПрди рд╡реЗрдм рдбреЙрдХреНрд╕ рдХреА рдУрд░ рд░реБрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЕрдкрдиреА рдЦреБрдж рдХреА рдкрд░рддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

WebSocket рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреНрдпреЛрдВ рди рдбрд░реЗрдВ


рдкрд╣рд▓рд╛ рдмрд┐рдВрджреБ рдЬреЛ рдбрд░рд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди ред рдЖрдЬ рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ - рд╡реЗрдмрд╕реНрдХреЗрдЯ рд╡реЗрдм рдкрд░ рдФрд░ рдореЛрдмрд╛рдЗрд▓ рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред

рдЫрд╡рд┐

рдЫрд╡рд┐

https://caniuse.com/#feat=websockets

рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЖрд╕рд╛рдиреА рд╣реИ ред рд╣рд╛рдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

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

рдЙрд╕реА рд╕рдордп, рдкрдХрдбрд╝ рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдЖрдорддреМрд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдУрдиреЗрд╕рдореЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдп: рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдирд╡реАрдирддрдо рд╕рдорд╛рдЪрд╛рд░ рдореЙрдбрд▓ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ рднреАред

рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ "рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЖрдпрд╛ рд╣реВрдВ:

 const wsUser = new WebSocket("ws://www.example.com/user"); wsUser.onmessage = (event) => { // ... }; const wsNews = new WebSocket("ws://www.example.com/news"); wsNews.onmessage = (event) => { // ... }; const wsTime = new WebSocket("ws://www.example.com/time"); wsTime.onmessage = (event) => { // ... }; const wsDinner = new WebSocket("ws://www.example.com/dinner"); wsDinner.onmessage = (event) => { // ... }; const wsCurrency = new WebSocket("ws://www.example.com/currency"); wsCurrency.onmessage = (event) => { // ... }; const wsOnline = new WebSocket("ws://www.example.com/online"); wsOnline.onmessage = (event) => { // ... }; const wsLogin = new WebSocket("ws://www.example.com/login"); wsLogin.onmessage = (event) => { // ... }; const wsLogout = new WebSocket("ws://www.example.com/logout"); wsLogout.onmessage = (event) => { // ... }; 

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рд╕реЛрдЪрд┐рдП рдХрд┐ рдЕрдЧрд░ рдпреЗ рджрд░реНрдЬрдиреЛрдВ рдпрд╛ рд╕реИрдХрдбрд╝реЛрдВ рд╣реЛрдВ рддреЛ рдХреИрд╕рд╛ рд▓рдЧреЗрдЧрд╛ред рдЬрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдореИрдВрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд▓рдЧрднрдЧ рддреАрди рд╕реМ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реБрдПред

рдЫрд╡рд┐

рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рддреГрддреАрдп-рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ addEventListener рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 ws.on("user", (userData) => { / .. }) 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рдПрдХрд▓ рд╡рд┐рдзрд┐ - рдУрдирдореЗрд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдкрдиреЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЛрдб рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдСрдирдореЗрд╕реЗрдЬ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╡рд╣ рдбреЗрдЯрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╕реВрдЪрдирд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рд╣рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 { "event": "user", "data": { "name": "John Doe", ... } } 

рдЬрд╣рд╛рдВ рдИрд╡реЗрдВрдЯ рдХреБрдВрдЬреА рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдиреЗ рдХреМрди рд╕реА рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреА рд╣реИред рдЕрдЧрд▓рд╛, рд╕рд╛рдордиреЗ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдкрд░, рдПрдХ рдмрд╕ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдЬреЛ рдШрдЯрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкрддреЗ рдкрд░ рднреЗрдЬрддреА рд╣реИ:

 const ws = new WebSocket("ws://www.example.com"); ws.onmessage = (event) => { const data = JSON.parse(event.data); if (data.event === 'user') { // ... } if (data.event === 'news') { // ... } }; 


рдЗрд╕рд╕реЗ рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЬреЗрдПрд╕ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдирдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдХреЛрдгреАрдп рдореЗрдВ рд╡реЗрдмрд╕реЙрдХреЗрдЯ


рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдорд┐рд▓реА - рд╕реАрдзреЗ рдПрдВрдЧреБрд▓рд░ рдореЗрдВ рд╡реЗрдмрд╕реНрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рдореВрд▓ WebSocket API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рд░рд▓рддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо RxJs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо Angular рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рджреЗрд╢реА рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдгреАрдп рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЖрд╕рд╛рди-рд╕реЗ-рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдБ, RxJs рдЕрд╡рд▓реЛрдХрдиреАрдп, рдЖрд╡рд╢реНрдпрдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ, рдЖрджрд┐, рд▓реЗрдХрд┐рди RxJs рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЖрдкрдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рд╣реИ: WebSocketSubject рдорд╛рдирдХ WebSocket рдкрд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЖрд╡рд░рдг рд╣реИред рдПрдкреАрдЖрдИред рдпрд╣ рдПрдХ рдИрд╡реЗрдВрдЯ рдмрд╕ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ рдпрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд┐рд╖рдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╢реИрд▓реА рдХреЗ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

RxJs WebSocketSubject


рддреЛ, WebSocketSubject рдХреЛ WebSocketSubjectConfig рдФрд░ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЧрдВрддрд╡реНрдп рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЕрдкрдиреЗ рджреЗрдЦреЗ рдЧрдП рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдк рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рд╕реБрди рдФрд░ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдЖрдк WebSocketSubject рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдиреЗрдХреНрд╢рди url рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ RxJs рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреА рд╕рднреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реА рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ webSocketSubject.next (рдбреЗрдЯрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╣рдо WebSocket Angular рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдХрд┐ рд╣рдо рд╕реЗрд╡рд╛ рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ:

  • рдПрдХреАрдХреГрдд рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕;
  • DI рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрддрд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛;
  • рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛;
  • рдЯрд╛рдЗрдкрд┐рдВрдЧ;
  • рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдХреНрд╖рдорддрд╛;
  • рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛;
  • рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛;
  • рд░рд┐рдХрдиреЗрдХреНрдЯред

рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдпрд╛ рд╕рд░реНрд╡рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдВрдЧрдарди, рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рд░реНрд╡реЛрдкрд░рд┐ рдХрд╛рд░рдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд░реЗрдХ, рд╕рд░реНрд╡рд░ рдХреНрд░реИрд╢, рдпрд╛ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЬреЛ рдХрдиреЗрдХреНрд╢рди рдмреНрд░реЗрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рд╛рдордВрдЬрд╕реНрдп рдХреЗ рдкреНрд░рдпрд╛рд╕ рдмрд╣реБрдд рдмрд╛рд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдЬрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдореИрдВ рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рдХрд░ рджреВрдВрдЧрд╛, рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕реЗ рдЖрдк рд░реВрд╕реА-рднрд╛рд╖реА рдХреЛрдгреАрдп рд╕рдореБрджрд╛рдп рдореЗрдВ рдЧрд┐рдЯрд╣рдм рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

 export interface WebSocketConfig { url: string; reconnectInterval?: number; reconnectAttempts?: number; } export class WebsocketModule { public static config(wsConfig: WebSocketConfig): ModuleWithProviders { return { ngModule: WebsocketModule, providers: [{ provide: config, useValue: wsConfig }] }; } } 

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рд╕рдВрджреЗрд╢ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 export interface IWsMessage<T> { event: string; data: T; } 

рдЬрд╣рд╛рдВ рдИрд╡реЗрдВрдЯ рдХреБрдВрдЬреА рд╣реИ, рдФрд░ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдПрдХ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореЙрдбрд▓ рд╣реИред

рд╕реЗрд╡рд╛ рдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 export interface IWebsocketService { on<T>(event: string): Observable<T>; send(event: string, data: any): void; status: Observable<boolean>; } 

рд╕реЗрд╡рд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ:

 //   WebSocketSubject private config: WebSocketSubjectConfig<IWsMessage<any>>; private websocketSub: SubscriptionLike; private statusSub: SubscriptionLike; // Observable    interval private reconnection$: Observable<number>; private websocket$: WebSocketSubject<IWsMessage<any>>; // ,      private connection$: Observer<boolean>; //  Observable       private wsMessages$: Subject<IWsMessage<any>>; //       private reconnectInterval: number; //    private reconnectAttempts: number; //      private isConnected: boolean; //   public status: Observable<boolean>; 

рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ, рд╣рдореЗрдВ WebSocketConfig рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдореЙрдбреНрдпреВрд▓ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдерд╛:

 constructor(@Inject(config) private wsConfig: WebSocketConfig) { this.wsMessages$ = new Subject<IWsMessage<any>>(); //  ,  ,     this.reconnectInterval = wsConfig.reconnectInterval || 5000; this.reconnectAttempts = wsConfig.reconnectAttempts || 10; //      connection$   websocket$ this.config = { url: wsConfig.url, closeObserver: { next: (event: CloseEvent) => { this.websocket$ = null; this.connection$.next(false); } }, //     connection$ openObserver: { next: (event: Event) => { console.log('WebSocket connected!'); this.connection$.next(true); } } }; // connection status this.status = new Observable<boolean>((observer) => { this.connection$ = observer; }).pipe(share(), distinctUntilChanged()); //      this.statusSub = this.status .subscribe((isConnected) => { this.isConnected = isConnected; if (!this.reconnection$ && typeof(isConnected) === 'boolean' && !isConnected) { this.reconnect(); } }); // ,  -    this.websocketSub = this.wsMessages$.subscribe( null, (error: ErrorEvent) => console.error('WebSocket error!', error) ); //  this.connect(); } 

рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рд╕рд░рд▓ рд╣реИ:

 private connect(): void { this.websocket$ = new WebSocketSubject(this.config); //  //   ,    , //  ,  // ,    this.websocket$.subscribe( (message) => this.wsMessages$.next(message), (error: Event) => { if (!this.websocket$) { // run reconnect if errors this.reconnect(); } }); } 

рд░реАрдХрдиреЗрдХреНрдЯ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ:

 private reconnect(): void { //  interval    reconnectInterval this.reconnection$ = interval(this.reconnectInterval) .pipe(takeWhile((v, index) => index < this.reconnectAttempts && !this.websocket$)); //     ,        this.reconnection$.subscribe( () => this.connect(), null, () => { // Subject complete if reconnect attemts ending this.reconnection$ = null; if (!this.websocket$) { this.wsMessages$.complete(); this.connection$.complete(); } }); } 

рдСрди рдореЗрдердб, рдпрд╣ рднреА рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ, рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

 public on<T>(event: string): Observable<T> { if (event) { return this.wsMessages$.pipe( filter((message: IWsMessage<T>) => message.event === event), map((message: IWsMessage<T>) => message.data) ); } } 

рднреЗрдЬрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдФрд░ рднреА рд╕рд░рд▓ рд╣реИ:

 public send(event: string, data: any = {}): void { if (event && this.isConnected) { //   any ,   ""   string //      :) this.websocket$.next(<any>JSON.stringify({ event, data })); } else { console.error('Send error!'); } } 

рд╡рд╣ рдкреВрд░реА рд╕реЗрд╡рд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдХрд╛ рдереЛрдХ рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рдВрдЧрдарди рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред

рдЖрдЗрдП рдЕрдм рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред WebsocketModule рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

 imports: [ WebsocketModule.config({ url: environment.ws //      'ws://www.example.com' }) ] 

рдШрдЯрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ, рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ' рд╕рдВрджреЗрд╢реЛрдВ ' рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдкрд╛рда рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬрддреЗ рд╣реИрдВ:

 constructor(private wsService: WebsocketService) { this.wsService.on<IMessage[]>('messages') .subscribe((messages: IMessage[]) => { console.log(messages); this.wsService.send('text', 'Test Text!'); }); } 

рд╕реНрдерд┐рд░рд╛рдВрдХ рдпрд╛ рдПрдХ рдЧрдгрдирд╛ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдирд╛рдо рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рдо рдХрд╣реАрдВ рди рдХрд╣реАрдВ websocket.events.ts рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 export const WS = { ON: { MESSAGES: 'messages' }, SEND: { TEXT: 'text' } }; 

рдмрдирд╛рдП рдЧрдП WS рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рд╕рджрд╕реНрдпрддрд╛:

 this.wsService.on<IMessage[]>(WS.ON.MESSAGES) .subscribe((messages: IMessage[]) => { console.log(messages); this.wsService.send(WS.SEND.TEXT, 'Test Text!'); }); 

рдЫрд╡рд┐

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ


рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рдпрд╣ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рд╣реИ рдЬреЛ рдПрдХ рдПрдВрдЧреБрд▓рд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ WebSockets рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИред рд╕реЗрд╡рд╛ рдХрд╛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг GitHub рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкрд░ рдпрд╛ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдХреЛрдгреАрдп рдЪреИрдирд▓ рдкрд░ред

Source: https://habr.com/ru/post/hi416155/


All Articles