рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд░рд╛рд╡рдиреА рдХрд╣рд╛рдирд┐рдпрд╛рдВ рдЕрдХреНрд╕рд░ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддреА рд╣реИрдВ, рдХрд┐ рдпрд╣ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдкреНрд░рджрд╛рддрд╛ / рдкреНрд░рд╢рдВрд╕рдХ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рджрдмрд╛ рджреЗрддреЗ рд╣реИрдВ - рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рддрдХрдиреАрдХ рдХреА рддрд░рд╣ рд╡реЗрдмрд╕реНрдХреИрдЯ рддрдХрдиреАрдХ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЛ рджреВрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХрдерд┐рдд рд╕реАрдорд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ 96.8% рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЖрдЬ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рддрдХрдиреАрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 3.2% рд╢реЗрд╖ рдУрд╡рд░рдмреЛрд░реНрдб рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдпреЗ рд▓рд╛рдЦреЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВред рдореИрдВ рдЖрдкрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рдХреЗрд╡рд▓ рд╕рдм рдХреБрдЫ рддреБрд▓рдирд╛ рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣реА XmlHttpRequest, рдЬрд┐рд╕реЗ рд╣рд░ рдХреЛрдИ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрдЬрд╛рдХреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, 97.17% рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдмрд╣реБрдд рдЕрдзрд┐рдХ, рд╕рд╣реА рдирд╣реАрдВ?) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ 93.08% рд╣реИред рд╡реЗрдмрд╕реИрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рд╢рдд (рдФрд░ рдкрд╣рд▓реЗ рдпрд╣ рдФрд░ рднреА рдХрдо рдерд╛) рдиреЗ рдЕрдЬрд╛рдХреНрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рдХреЛ рднреА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рд░реЛрдХрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓рдВрдмреЗ рдорддрджрд╛рди рдкрд░ рдХрдордмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреЛ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣реА рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИрдВ рдЬреЛ XmlHttpRequest рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рднреА рдЧрд┐рд░рд╛рд╡рдЯ рдирд╣реАрдВ рд╣реЛрдЧреАред
рджреВрд╕рд░реА рдбрд░рд╛рд╡рдиреА рдХрд╣рд╛рдиреА, рдкреНрд░рджрд╛рддрд╛рдУрдВ рдпрд╛ рдХреЙрд░рдкреЛрд░реЗрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╕реЗ рд╡реЗрдмрд╕реИрдЯ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдирд╛ рднреА рдЕрдиреБрдЪрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╣рд░ рдХреЛрдИ https рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдордЭрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡реЗрдмрд╕реИрдЯ рдХрдиреЗрдХреНрд╢рди рдЦреБрд▓рд╛ рд╣реИ (рдмрд┐рдирд╛ рдмреНрд░реЗрдХ рдХреЗ https)ред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реАрдорд╛рдУрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡реЗрдм рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ред
рддреЛ, рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ WebSocket рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реЗрдЯ рд╣реИ: send () рдФрд░ close (), рд╕рд╛рде рд╣реА AddEventListener (), removeEventListener () рдФрд░ dispetEvent () EventTarget рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╡рд┐рдзрд┐рдпреЛрдВред рдЗрд╕рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдЖрдорддреМрд░ рдкрд░) рдпрд╛ рд╕реНрд╡рддрдВрддреНрд░ (рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕рдордп-рд╕рдордп рдкрд░ рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд░реАрдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рд╕рдВрджреЗрд╢ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рддреБрд░рдВрдд рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рд╕рдВрджреЗрд╢ рдЦреЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ (рдХрдИ рдмрд╛рд░) рдлрд┐рд░ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдлрд▓рддрд╛ рд░рд╕реАрдж рдХреЗ рдмрд╛рдж рдФрд░ рд╕рдВрджреЗрд╢ рдХреЗ рдкреБрд╖реНрдЯрд┐ рд╣реЛрдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рд╣реБрдИред
рдпрджрд┐ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рдФрд░ / рдпрд╛ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдПрдордХреНрдпреВрдкреА рдФрд░ рдПрдордХреНрдпреВрдЯреАрдЯреА, рдЬреЛ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдкрд░рд┐рд╡рд╣рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдо рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рд╡реЗрдмрд╕реИрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдРрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдВрдзрди рдХреЗ рдмрд┐рдирд╛ "рдирдЧреНрди" рдСрдирд╕реНрдореЗрдЬ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдзрдиреНрдпрд╡рд╛рдж рдХрд╛рд░реНрдпред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ (RPC)ред рдЖрдИрдбреА рдЖрдИрдбреА рдХреЛ json-rpc рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдкрд░рд┐рд╡рд╣рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ рдХреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджреЗрд╢ рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЕрдиреНрдп рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореБрдЭреЗ рдиреЛрдб рдкрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдлрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдВрдмрдВрдз рд╕рдордп-рд╕рдордп рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рд╕рд░реНрд╡рд░ рдХреА рд╢рдХреНрддрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдХрдИ рдФрд░ рд╕рд░реНрд╡рд░ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдиреЗрдХреНрд╢рди рдХрд╛рдЯ рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрд╕реА рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдПрдХ рд░реЗрдбрд┐рд╕ рд╕рд░реНрд╡рд░ рдпрд╛ рд░реЗрдбрд┐рд╕ рд╕рд░реНрд╡рд░ рдХреЗ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╡реИрд╕реЗ рднреА рдЪрд▓реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдиреЛрдбреНрд╕.рдЬреЗрдПрд╕ рдХреА рдХреНрд╖рдорддрд╛ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рде рдЦреБрд▓реЗ рд╣реИрдВ (рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВ) рд╡рд┐рд╢реЗрд╖ рд╕рд░реНрд╡рд░ рдЬреИрд╕реЗ рдХрд┐ рдХрддрд╛рд░реЛрдВ рдФрд░ рджрд▓рд╛рд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдХрдо рд╣реИрдВред рдФрд░ рд░реЗрдбрд┐рд╕ рд╕рд░реНрд╡рд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХреНрд░реЙрд╕-рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛, рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рдж, рдЦреБрд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдПрдПрдордХреНрдпреВрдкреА рдФрд░ рдПрдордХреНрдпреВрдЯреАрдЯреА рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╕рд░реНрд╡рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗрдмрд╕реНрдХреЙрдХ рдкрд░рд┐рд╡рд╣рди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдо рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕реВрдЪреАрдмрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд▓рд╛рдирд╛ рдмрд╣реБрдд рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрд╕рдВрднрд╡ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдХрдИ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВ рддреБрд░рдВрдд рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджреВрдВрдЧрд╛ рдЬреЛ рдкрд░рд┐рд╡рд╣рди рдХреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдордмреИрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдХрд┐ рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реНрдпрд╛рдкрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рд╡рд╣рди рдХреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рддрд░реАрдХреЛрдВ рдкрд░ рднреА рд╡рд╛рдкрд╕реА рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ - socket.ioред рдЕрдм рдЖрдк рд░рд╛рдп рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдзреАрдорд╛ рдФрд░ рдорд╣рдВрдЧрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рджреЗрд╢реА рд╡реЗрдмрд╕реНрдХреИрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдЬ рдпрд╣ рдЕрдкрдиреЗ рд╕рд╛рдзрдиреЛрдВ рд╕реЗ рд╕рдмрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдФрд░ рдлрд┐рд░ рд╕реЗ, рдЬрдм рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЦреНрдп рд╕реАрдорд┐рдд рдХрд╛рд░рдХ рдЧрддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рде рдЕрджреНрд╡рд┐рддреАрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдЦреБрд▓реЗ рдХрдиреЗрдХреНрд╢рди рд╣реИрдВред рдФрд░ рдпрд╣ рд╕рд╡рд╛рд▓ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрдмрдВрдз рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рддреЛ, soket.io рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рд╕рд░реНрд╡рд░ рдпрд╛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред socket.io, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╕реЗ рдмрдВрдзреЗ рдмрд┐рдирд╛ рд╕рдВрджреЗрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдИрд╡реЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдордирдорд╛рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ json-rpc рдорд╛рдирдХ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рд╛рд░рдВрднрд┐рдХ, рдореИрдВрдиреЗ рджреЛ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдиреАрдЪреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред
рдлреЗрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА
faye.jcoglan.com ред рдпрд╣ Bayeux рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ CometD рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рдВрджреЗрд╢ рдЪреИрдирд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ / рд╕рдВрджреЗрд╢ рдХрд╛ рд╡рд┐рддрд░рдг рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд░реНрд╡рд░ рдпрд╛ рд░реЗрдбрд┐рд╕ рд╕рд░реНрд╡рд░ рдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред RPC рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдпреЛрдХреИрдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдпреЛрдЬрдирд╛ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рдерд╛ред
рд╕реЙрдХреЗрдЯрдХреНрд▓рд╕реНрдЯрд░
socketcluster.io рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд░реЗрдбрд┐рд╕ рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рджреЛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдиреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЬрдм рдХреНрд▓рд╕реНрдЯрд░ рдХреА рддреИрдирд╛рддреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рджрд▓рд╛рд▓реЛрдВ рдФрд░ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЬрдЯрд┐рд▓ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдЕрдм socket.io рдкрд░ RPC рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ:
import io from 'socket.io-client'; const socket = io({ path: '/ws', transports: ['websocket'] }); const remoteCall = data => new Promise((resolve, reject) => { socket.emit('remote-call', data, (response) => { if (response.error) { reject(response); } else { resolve(response); } }); });
const server = require('http').createServer(); const io = require('socket.io')(server, { path: '/ws' }); io.on('connection', (socket) => { socket.on('remote-call', async (data, callback) => { handleRemoteCall(socket, data, callback); }); }); server.listen(5000, () => { console.log('dashboard backend listening on *:5000'); }); const handleRemoteCall = (socket, data, callback) => { const response =... callback(response) }
рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рд╣реИред рдЕрдм рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
github.com/marmelab/react-admin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдпреЛрдЬрдирд╛ рд╣реИ, рд▓рдЧрднрдЧ рдПрдХ рддрд░рд╣ рдХрд╛ рдорд╛рдирдХред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
dataProvider( 'GET_LIST', ' ', { pagination: { page: {int}, perPage: {int} }, sort: { field: {string}, order: {string} }, filter: { Object } }
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддреА рд╣реИ:
{ data: [ ], total: }
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрд╡рд░реЛрдВ рдФрд░ рдЪреМрдЦрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреА рдПрдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлрд╛рдпрд░рдмреЗрд╕, рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ, рдЧреНрд░рд╛рдлрдХрд▓, рдЖрджрд┐)ред RPC рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдмрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдПрдорд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
import io from 'socket.io-client'; const socket = io({ path: '/ws', transports: ['websocket'] }); export default (action, collection, payload = {}) => new Promise((resolve, reject) => { socket.emit('remote-call', {action, collection, payload}, (response) => { if (response.error) { reject(response); } else { resolve(response); } }); });
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рджреВрд░рд╕реНрде рдХреЙрд▓ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдореИрдкрд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕рдкреНрд░реЗрд╕ .js рдХреЗ рд╕рдорд╛рди рдПрдХ рд░рд╛рдЙрдЯрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЗрд╡рд▓ рдорд┐рдбрд▓рд╡реЗрдпрд░ (рд░реАрдХ, рд░реЗрд╕, рдиреЗрдХреНрд╕реНрдЯ) рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдмрдЬрд╛рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рд╕реЙрдХреЗрдЯ, рдкреЗрд▓реЛрдб, рдХреЙрд▓рдмреИрдХ) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдо рд╕рднреА рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдорд┐рд▓рд╛:
const Router = require('./router'); const router = Router(); router.use('GET_LIST', (socket, payload, callback) => { const limit = Number(payload.pagination.perPage); const offset = (Number(payload.pagination.page) - 1) * limit return callback({data: users.slice(offset, offset + limit ), total: users.length}); }); router.use('GET_ONE', (socket, payload, callback) => { return callback({ data: users[payload.id]}); }); router.use('UPDATE', (socket, payload, callback) => { users[payload.id] = payload.data return callback({ data: users[payload.id] }); }); module.exports = router; const users = []; for (let i = 0; i < 10000; i++) { users.push({ id: i, name: `name of ${i}`}); }
рд░рд╛рдЙрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг
рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИредрд╕рднреА рдЬреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рд╣реИ:
import React from 'react'; import { Admin, Resource, EditGuesser } from 'react-admin'; import UserList from './UserList'; import dataProvider from './wsProvider'; const App = () => <Admin dataProvider={dataProvider}> <Resource name="users" list={UserList} edit={EditGuesser} /> </Admin>; export default App;
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ
1.
www.infoq.com/articles/Web-Sockets-Proxy-Serversapapacy@gmail.com
14 рдЬреБрд▓рд╛рдИ, 2019